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