Scala中的右折叠运算符出现意外行为

Scala中的右折叠运算符出现意外行为,scala,syntax,Scala,Syntax,为什么 (1 to 5).:\ (0)(_ + _) 工作,而 (1 to 5) :\ (0)(_ + _) 给我一个错误?在第一种情况下,您使用的是二进制运算符:\就像一个方法,其中0是唯一的参数。这将返回一个curried函数,您将lambda\uu+\uu传递到该函数中,正如您所希望的那样 第二种情况是,将:\用作中缀运算符,由于运算符优先级的原因而失败。Scala首先尝试计算(0)(+uu),给出错误Int(0)不接受参数,因为(0)不是一个函数 为了像第二个版本一样使用语法,您需要

为什么

(1 to 5).:\ (0)(_ + _)
工作,而

(1 to 5) :\ (0)(_ + _)

给我一个错误?

在第一种情况下,您使用的是二进制运算符
:\
就像一个方法,其中
0
是唯一的参数。这将返回一个curried函数,您将lambda
\uu+\uu
传递到该函数中,正如您所希望的那样

第二种情况是,将
:\
用作中缀运算符,由于运算符优先级的原因而失败。Scala首先尝试计算
(0)(+uu)
,给出错误
Int(0)不接受参数,因为
(0)
不是一个函数

为了像第二个版本一样使用语法,您需要添加一些参数:

scala> ((1 to 5) :\ 0)(_+_)
res1: Int = 15
顺便说一句,每个操作符都是Scala中的一个方法,可以像一个方法一样使用:

scala> 2.+(3)
res2: Int = 5

在第一种情况下,您使用的是二进制运算符
:\
,就像使用
0
是唯一参数的方法一样。这将返回一个curried函数,您将lambda
\uu+\uu
传递到该函数中,正如您所希望的那样

第二种情况是,将
:\
用作中缀运算符,由于运算符优先级的原因而失败。Scala首先尝试计算
(0)(+uu)
,给出错误
Int(0)不接受参数,因为
(0)
不是一个函数

为了像第二个版本一样使用语法,您需要添加一些参数:

scala> ((1 to 5) :\ 0)(_+_)
res1: Int = 15
顺便说一句,每个操作符都是Scala中的一个方法,可以像一个方法一样使用:

scala> 2.+(3)
res2: Int = 5

实际上,每个操作符都是scala中的一个方法。实际上,每个操作符都是scala中的一个方法。