1 to 5 foldRight (0)(x:Int, y:Int => x+y)
我正在尝试从0到左添加所有值,并将0作为初始参数。我收到以下错误
Int(0) does not take parameters
任何人都可以向我解释这个错误甚至意味着什么? 感谢。
答案 0 :(得分:8)
只是解析器变得“混乱”,所以它试图将(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 :(得分:-1)
您的代码有两个问题。第一个是你需要在1 to 5
周围使用括号,第二个是你的匿名函数的语法。你需要围绕参数的括号。
(1 to 5).foldRight(0)((x,y) => x + y)