为什么这个通配符函数告诉我它的参数数量错误?

时间:2013-05-11 15:08:56

标签: scala wildcard anonymous-function

违规代码是:

<console>:47: error: wrong number of parameters; expected = 2
            terms.foldLeft(r.unitA)(r.add(_, _.eval(x)))

我通过写作解决了我的问题:

 terms.foldLeft(r.unitA)((a,b) => r.add(a, b.eval(x)))

但我仍然想知道是什么阻止了我的初步尝试?

2 个答案:

答案 0 :(得分:2)

以下是SLS 6.23的部分:

http://iainmcgin.github.io/scala-ref-markdown/#placeholder-syntax-for-anonymous-functions

更新了链接:

http://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#placeholder-syntax-for-anonymous-functions

Daniel Sobral的帖子说:

  

“当您使用”_“作为a的匿名参数的占位符时   函数,该函数的范围是最里面的括号   包含它。 大部分时间。

更新了旋转:我认为规范中的语法解释更容易获得,占位符不会转义为封闭的Expr。有各种重复的问题。

答案 1 :(得分:1)

从我读过的关于这类问题的内容来看,当你使用“_”作为函数的匿名参数的占位符时,该函数的范围是包含它的最里面的括号。因此,当您使用r.add()包装两个占位符时,参数的范围将丢失。查看此链接,看看它是否有助于更好地解释规则。

http://www.scala-lang.org/node/2916