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