某些Seq[A]
上reduceLeft
的签名是
def reduceLeft [B >: A] (f: (B, A) => B): B
A
的类型已知,但下限 >:
告诉我们 B
可以是 A 的任何父类(super class)型
.
为什么会这样?为什么不呢
def reduceLeft (f: (A, A) => A): A
我们已经知道序列的头部是类型 A
,所以我无法想象 B
可能是不等于 A 的任何东西
。您能否提供一个示例,其中 B
是某种父类(super class)型?
最佳答案
假设您的类 B 有一个方法 combine(other:B): B
。现在,您对 A
列表调用 reduceLeft((b,a) => b.combine(a))
。由于 combine
的返回类型是 B
,因此 reduceLeft
的类型参数需要是 B
。
关于scala - 为什么reduceLeft的类型参数包含下界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364763/