用它看代码foldl很难理解它的语法,例如:
def lstToMap(lst:List[(String,Int)], map: Map[String, Int] ):Map[String, Int] = {
(map /: lst) (addToMap)
}
是/:中缀运算符吗?(map /: lst)部分应用是什么意思?为什么我不能这样打电话:
`/: map lst addToMap`
以字符结尾的方法名称:可以用在它们绑定到的实例的左侧(即,它们关联到右侧)。在这种情况下,/:是一个方法List。根据 Scaladoc:
注意:/: 是 foldLeft 的替代语法;z /: xs 与 xs foldLeft z 相同。
您所写内容的替代方法是:
lst./:(map)(addToMap)
编辑:和 foldLeft 的另一种选择:
lst.foldLeft(map)(addToMap)
是的,/:可以用作中缀运算符。但是,折叠操作需要三个参数:
使用中缀,您只能指定这三个参数中的两个:序列(即接收者)和初始值。作为部分应用程序的事实(map /: lst)反映了您仍然缺少论点的事实。下面是一个数字序列的乘积示例,从初始值 1 开始:
(1 /: xs)(_*_)
由于 Scala 支持函数字面量的花括号,您还可以使用它来使函数参数看起来更像函数体:
(1 /: xs) { (x, y) =>
x * y
}