用它看代码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
}