某些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
是超类型的例子吗?
答案 0 :(得分:3)
假设您的班级B有一个方法combine(other:B): B
。现在,您在reduceLeft((b,a) => b.combine(a))
列表中调用A
。由于combine
的返回类型为B
,因此reduceLeft
的类型参数必须为B
。