我正在查看为 immutable.Set 定义折叠的方式:
def fold [A1 >: A] (z: A1)(op: (A1, A1) ⇒ A1): A1
然而 foldLeft 被定义为:
def foldLeft [B] (z: B)(op: (B, A) ⇒ B): B
这对我来说看起来很奇怪,至少乍一看,因为我希望 fold 能够更改它返回的集合的类型,就像 foldLeft 一样。
我想这是因为 foldLeft 和 foldRight 保证了元素折叠的顺序。fold 给的保证是什么?