为什么
(1 to 5).:\ (0)(_ + _)
Run Code Online (Sandbox Code Playgroud)
工作,而
(1 to 5) :\ (0)(_ + _)
Run Code Online (Sandbox Code Playgroud)
给我一个错误?
在第一种情况下,您使用二元运算符:\就像一个方法,其中0唯一的参数.这将返回一个curried函数,您_+_可以按照预期传递lambda .
第二种情况,即:\用作中缀运算符,由于运算符优先级而失败.Scala (0)(_+_)首先尝试评估,Int(0) does not take parameters因为(0)它不是函数而给出错误.
为了使用类似第二个版本的语法,您需要添加一些parens:
scala> ((1 to 5) :\ 0)(_+_)
res1: Int = 15
Run Code Online (Sandbox Code Playgroud)
顺便说一下,每个运算符都是Scala中的一个方法,可以像下面一样使用:
scala> 2.+(3)
res2: Int = 5
Run Code Online (Sandbox Code Playgroud)