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

时间:2010-10-27 11:12:55

标签: scala syntax

注意:更一般的问题的详细答案在Stack Overflow问题 What are the precise rules for when you can omit parenthesis, dots, braces, = (functions), etc.?

以下作品:

scala> List(1,2,3) filter (_ > 1) reduceLeft(_ + _)
res65: Int = 5

还有以下内容:

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

但不是这个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)(_ + _)
                                        ^

建议的修正是什么?

2 个答案:

答案 0 :(得分:7)

Stack Overflow问题 What are the precise rules for when you can omit parenthesis, dots, braces, = (functions), etc.? 中详细介绍了此主题。

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

作为Marimuthu Madasamy mentioned,这是有效的(对象(List),方法(foldLeft)及其第一个参数(0)在括号中):

(List(1,2,3) filter (_ > 1) foldLeft 0) (_ + _)

答案 1 :(得分:4)

这有效:

(List(1,2,3) filter (_ > 1) foldLeft 0) (_ + _)