为什么在foldLeft中留点会导致编译错误?

nsf*_*n55 11 functional-programming scala

任何人都可以解释为什么我在下面省略了应用foldLeft函数的点符号时会看到以下编译错误?(版本2.9.2)

scala> val l = List(1, 2, 3)
res19: List[Int] = List(1 ,2 ,3)

scala> l foldLeft(1)(_ * _)
<console>:9: error: Int(1) does not take parameters
                    l foldLeft(1)(_ * _)
                                    ^
Run Code Online (Sandbox Code Playgroud)

scala> l.foldLeft(1)(_ * _) 
res27: Int = 6
Run Code Online (Sandbox Code Playgroud)

这不适用于其他更高阶的功能,例如map我似乎不关心我是否提供点.

我不认为它是一个相关性的东西,因为我不能只是调用它 foldLeft(1)

Pau*_*her 18

这是因为foldLeft是咖喱的.除了使用点表示法,您还可以通过添加括号来解决此问题:

scala> (l foldLeft 1)(_ * _)
res3: Int = 6
Run Code Online (Sandbox Code Playgroud)

哦 - 关于你无法调用的评论foldLeft(l),你可以,但你需要部分应用它:

scala> (l foldLeft 1) _
res3: ((Int, Int) => Int) => Int = <function1>
Run Code Online (Sandbox Code Playgroud)