我正在学习Scala,我只是想知道在左边。 由于左侧的折叠是咖喱,您应该能够获得具有第一个参数的部分应用函数(PAF),如下所示。
(0 /: List(1, 2, 3)) _
但实际上,我有一个错误。
<console>:8: error: missing arguments for method /: in trait TraversableOnce;
follow this method with `_' if you want to treat it as a partially applied function
然后我尝试了折叠右边的相同的东西,如下面的
(List(1, 2, 3) :\ 0) _
通过这种方式,它正确运行,我可以得到一个PAF,如((Int,Int)=&gt; Int)=&gt; INT
我知道我可以通过使用foldLeft方法获得PAF,但我想知道是否可以用'/:'来表达它。
答案 0 :(得分:3)
下划线语法不适用于采用多个参数列表的右关联方法。以下是我看到的选项:
声明变量类型:
val x: ((Int, Int) => Int) => Int = 0 /: List(1, 2, 3)
同样,使用类型归属:
val x = (0 /: List(1,2,3)) : ((Int, Int) => Int) => Int
使用后缀表示法:
val x = List(1,2,3)./:(0) _
使用foldLeft
同义词:
val x = List(1,2,3).foldLeft(0) _
答案 1 :(得分:1)
我玩弄它,并且找不到有效的配置。
总是更明确:
val f = List(1,2,3,4,5).foldLeft(0)_
这可以说是更整洁。我会一直在四处寻找。
编辑:
有这个:
val f2 = (0 /: List(1,2,3,4,5))(_: (Int,Int) => Int)
val x = f2(_+_)
但那变得非常丑陋。没有类型注释,它会抱怨。这是我能做的最好的事情。