Почему параметр типа Reduceleft содержит нижнюю границу?
-
27-10-2019 - |
Вопрос
Подпись 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
.
Не связан с StackOverflow