Почему параметр типа limitLeft содержит нижнюю границу?
Подпись 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 ответ
Решение
Допустим, у вашего класса B есть метод combine(other:B): B
, Теперь звонишь reduceLeft((b,a) => b.combine(a))
в списке A
s. С возвращаемым типом combine
является B
параметр типа для reduceLeft
должно быть B
,