Scala:是否有可能从 leftfold 获得部分应用的功能?
Scala: Is it possible to get partially applied function from leftfold?
我目前正在学习 Scala,我只是想知道 fold-left。
由于 fold-left 是柯里化的,你应该能够得到一个带有第一个参数的部分应用函数(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) => Int) => Int
我知道我可以通过foldLeft方法得到一个PAF,但我想知道是否可以用'/:'表示它。
我试了一下,找不到合适的配置。
总有更明确的:
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(_+_)
但这变得非常难看。没有类型注释,它会抱怨。不过那是我能做的最好的了。
下划线语法不适用于采用多个参数列表的右关联方法。以下是我看到的选项:
声明一个变量类型:
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) _
我目前正在学习 Scala,我只是想知道 fold-left。 由于 fold-left 是柯里化的,你应该能够得到一个带有第一个参数的部分应用函数(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) => Int) => Int
我知道我可以通过foldLeft方法得到一个PAF,但我想知道是否可以用'/:'表示它。
我试了一下,找不到合适的配置。
总有更明确的:
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(_+_)
但这变得非常难看。没有类型注释,它会抱怨。不过那是我能做的最好的了。
下划线语法不适用于采用多个参数列表的右关联方法。以下是我看到的选项:
声明一个变量类型:
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) _