为什么reduceLeft的type参数包含下限?

时间:2011-12-03 01:28:41

标签: scala scala-collections reduce type-parameter

某些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 个答案:

答案 0 :(得分:3)

假设您的班级B有一个方法combine(other:B): B。现在,您在reduceLeft((b,a) => b.combine(a))列表中调用A。由于combine的返回类型为B,因此reduceLeft的类型参数必须为B