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(_+_)

但这变得非常难看。没有类型注释,它会抱怨。不过那是我能做的最好的了。

下划线语法不适用于采用多个参数列表的右关联方法。以下是我看到的选项:

  1. 声明一个变量类型:

    val x: ((Int, Int) => Int) => Int =  0 /: List(1, 2, 3)
    
  2. 同理,使用类型归属:

    val x = (0 /: List(1,2,3)) : ((Int, Int) => Int) => Int
    
  3. 使用后缀表示法:

    val x = List(1,2,3)./:(0) _
    
  4. 使用foldLeft同义词:

    val x = List(1,2,3).foldLeft(0) _