2

有问题的代码是:

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

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

4

2 回答 2

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

丹尼尔索布拉尔的帖子说:

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

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

于 2013-05-12T00:10:11.537 回答
2

根据我对此类问题的阅读,当您使用“_”作为函数的匿名参数的占位符时,该函数的范围是包含它的最内层括号。所以当你用 包裹你的两个占位符时r.add(),参数的范围就丢失了。查看此链接,看看它是否有助于更好地解释规则。

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

于 2013-05-11T17:53:00.147 回答