2 FoldLefts是平等的

时间:2013-11-18 04:14:53

标签: scala

为什么以下两个foldLeft都会产生相同的输出?

#1

scala> List(1,2,3).foldLeft(List[Int]())( (acc, el) => acc :+ el)
res114: List[Int] = List(1, 2, 3)

现在使用_ :+ _作为(B, A) => B参数。

#2

scala> List(1,2,3).foldLeft(List[Int]())(_ :+ _)
res115: List[Int] = List(1, 2, 3)

特别是,在第二种情况下,没有明确附加accumulator会让我感到困惑。

1 个答案:

答案 0 :(得分:8)

_ :+ _只是(x1, x2) => x1 :+ x2的简写,就像list.map(_.toString)只是list.map(x => x.toString)一样。

详细了解占位符语法here