将 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)(_ + _)
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)(_ + _)