Почему параметр типа limitLeft содержит нижнюю границу? - PullRequest
2 голосов
/ 03 декабря 2011

Подпись reduceLeft на некоторых Seq[A] равна

def reduceLeft [B >: A] (f: (B, A) => B): B 

Тип A известен, но нижняя граница >: говорит нам, что B может быть любым супертипом A.

Почему это так? Почему бы не

def reduceLeft (f: (A, A) => A): A

Мы уже знаем, что заголовок последовательности имеет тип A, и поэтому я не могу думать о том, как B может быть чем-то отличным от A. Можете ли вы привести пример, где B - это какой-нибудь супер-тип?

1 Ответ

3 голосов
/ 03 декабря 2011

Допустим, у вашего класса B есть метод combine(other:B): B. Теперь вы звоните reduceLeft((b,a) => b.combine(a)) в список A с. Поскольку тип возвращаемого значения combine равен B, параметр типа reduceLeft должен быть B.

...