带有curried函数的Scala无点调用语法

ron*_*ron 1 syntax scala

注意:对一般问题的详细解答是在Stack Overflow问题中,什么是可以省略括号,点,大括号,=(函数)等的精确规则?.

以下作品:

scala> List(1,2,3) filter (_ > 1) reduceLeft(_ + _)
res65: Int = 5
Run Code Online (Sandbox Code Playgroud)

还有以下内容:

scala> List(1,2,3).filter(_ > 1).foldLeft(0)(_ + _)
res67: Int = 5
Run Code Online (Sandbox Code Playgroud)

但不是这个sytax:

scala> List(1,2,3) filter (_ > 1) foldLeft(0)(_ + _)
<console>:10: error: 0 of type Int(0) does not take parameters
       List(1,2,3) filter (_ > 1) foldLeft(0)(_ + _)
                                        ^
Run Code Online (Sandbox Code Playgroud)

什么是建议的修复?

Ste*_*eve 7

Stack Overflow问题中很好地描述了这个主题.当你可以省略括号,点,大括号,=(函数)等时,有哪些准确的规则?.

Curried函数似乎比使用一个参数的方法稍微困难一些.要省略点,curried函数需要在中缀调用之外使用括号.

正如Marimuthu Madasamy所提到的,这是有效的(对象(List),方法(foldLeft)及其第一个参数(0)在括号中):

(List(1,2,3) filter (_ > 1) foldLeft 0) (_ + _)
Run Code Online (Sandbox Code Playgroud)