注意:我在使用Scala 2.8-can这是一个问题?
为什么我不能使用fold功能的方式相同foldLeft或foldRight?
在Set scaladoc中它说:
折叠的结果可能只是此并行集合的类型参数的超类型
T.
但我T在函数签名中看不到任何类型参数:
def fold [A1 >: A] (z: A1)(op: (A1, A1) ? A1): A1
Run Code Online (Sandbox Code Playgroud)
foldLeft-Right和之间的区别是什么fold,以及如何使用后者?
编辑:例如,如何编写折叠以添加列表中的所有元素?有了foldLeft它将是:
val foo = List(1, 2, 3)
foo.foldLeft(0)(_ + _)
// now try fold:
foo.fold(0)(_ + _)
>:7: error: value fold is not a member of List[Int]
foo.fold(0)(_ + _)
^
Run Code Online (Sandbox Code Playgroud) 我还没有理解聚合函数:
例如,拥有:
val x = List(1,2,3,4,5,6)
val y = x.par.aggregate((0, 0))((x, y) => (x._1 + y, x._2 + 1), (x,y) => (x._1 + y._1, x._2 + y._2))
Run Code Online (Sandbox Code Playgroud)
结果将是: (21,6)
好吧,我认为这(x,y) => (x._1 + y._1, x._2 + y._2)是为了并行获得结果,例如它将是(1 + 2,1 + 1),依此类推.
但正是这一部分让我感到困惑:
(x, y) => (x._1 + y, x._2 + 1)
Run Code Online (Sandbox Code Playgroud)
为什么x._1 + y?这x._2是0?
提前致谢.