Почему параметр типа 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)) в списке As. С возвращаемым типом combine является B параметр типа для reduceLeft должно быть B,

Другие вопросы по тегам