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

このタイプの問題について私が読んだことから、関数の匿名パラメーターのプレースホルダーとして「_」を使用すると、その関数のスコープはそれを含む最も内側の括弧になります。したがって、2 つのプレースホルダーを でラップするr.add()と、params のスコープが失われます。このリンクをチェックして、ルールをよりよく説明するのに役立つかどうかを確認してください.

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

于 2013-05-11T17:53:00.147 に答える