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)