Scala在使用带有操作符语法的foldRight时出现奇怪错误


1 to 5 foldRight (0)(x:Int, y:Int => x+y)

我试图添加所有的值从右到左与0作为初始参数。我得到以下错误

Int(0) does not take parameters
谁能给我解释一下这个错误到底是什么意思?谢谢。

这只是解析器"困惑",所以它试图应用(x: Int, y: Int ...)作为(0)的参数。

具体来说,你使用的是scala语法特性,允许使用

a.f(b)

a f b

这适用于任何具有单个参数的方法。然而,当你的方法有多个参数列表(如foldRight)时,你必须格外小心。

这是解析器看到的

1 to 5  foldRight (0)(x: Int, y: Int => x + y)
|__a__| |___f___| |____________b_____________| 

因此,在计算b时,它将0作为一个函数,(x: Int, ...)作为参数。显然这是行不通的,因为"Int(0) does not take parameters" .

可以使用

(1 to 5).foldRight(0)((x,y) => x + y)

或者

(1 to 5).foldRight(0)(_ + _)

您的代码有两个错误。第一个问题是需要在1 to 5周围使用括号,第二个问题是匿名函数的语法。这里的参数需要用括号括起来。

(1 to 5).foldRight(0)((x,y) => x + y)

最新更新