問題のコードは次のとおりです。
<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)))
しかし、最初の試行を妨げた原因を知りたいですか?
問題のコードは次のとおりです。
<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)))
しかし、最初の試行を妨げた原因を知りたいですか?
SLS 6.23 のセクションは次のとおりです。
http://iainmcgin.github.io/scala-ref-markdown/#placeholder-syntax-for-anonymous-functions
更新されたリンク:
ダニエル・ソブラルの投稿には次のように書かれています。
「関数の匿名パラメーターのプレースホルダーとして「_」を使用する場合、その関数のスコープは、それを含む最も内側の括弧です。ほとんどの場合。
更新されたスピン: プレースホルダーが囲んでいる をエスケープしないという、仕様からの構文説明の方が簡単に取得できると思いますExpr
。さまざまな重複した質問があります。
このタイプの問題について私が読んだことから、関数の匿名パラメーターのプレースホルダーとして「_」を使用すると、その関数のスコープはそれを含む最も内側の括弧になります。したがって、2 つのプレースホルダーを でラップするr.add()
と、params のスコープが失われます。このリンクをチェックして、ルールをよりよく説明するのに役立つかどうかを確認してください.