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中的一个方法。