Почему параметр типа Reduceleft содержит нижнюю границу?

StackOverflow https://stackoverflow.com/questions/8364763

Вопрос

Подпись 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 какой-то супер-тип?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top