使用带运算符语法的foldRight时出现Scala奇怪错误

时间:2015-08-20 10:11:40

标签: scala fold

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

我正在尝试从0到左添加所有值,并将0作为初始参数。我收到以下错误

Int(0) does not take parameters

任何人都可以向我解释这个错误甚至意味着什么? 感谢。

2 个答案:

答案 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)