将 foldRight 与运算符语法一起使用时出现 Scala 奇怪错误

Scala strange error when using foldRight with operator syntax

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

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

Int(0) does not take parameters

谁能给我解释一下这个错误到底是什么意思? 谢谢

您的代码有两处错误。第一个是你需要在 1 to 5 周围使用方括号,第二个是你的匿名函数的语法。那里的参数需要括号。

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

只是解析器得到了 "confused",所以它试图应用 (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)(_ + _)