Scala:是否可以从左折叠获得部分应用的函数?

Tam*_*jin 5 scala partialfunction foldleft

我目前正在学习 Scala,我只是想知道左折叠。由于左折叠是柯里化的,因此您应该能够获得带有第一个参数的部分应用函数(PAF),如下所示。

(0 /: List(1, 2, 3)) _
Run Code Online (Sandbox Code Playgroud)

但实际上,我有一个错误。

<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
Run Code Online (Sandbox Code Playgroud)

然后我通过向右折叠尝试了同样的事情,如下所示

(List(1, 2, 3) :\ 0) _
Run Code Online (Sandbox Code Playgroud)

这样,它就正确了,我可以得到一个PAF,例如((Int, Int) => Int) => Int

我知道我可以通过使用foldLeft方法获得PAF,但我想知道是否可以用“/:”来表达它。

Ben*_*ich 4

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

  1. 声明变量类型:

    val x: ((Int, Int) => Int) => Int =  0 /: List(1, 2, 3)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 类似地,使用类型归属:

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

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

    val x = List(1,2,3).foldLeft(0) _
    
    Run Code Online (Sandbox Code Playgroud)