このコンテキストは非常に単純です。私の仮定は、Oderskyの著書「Programmingin Scala、2nd Edition」、セクション8.5「プレースホルダー構文」に基づいています。
List [List [Boolean]](つまり、長方形のビットマップ)があり、値「true」の出現回数の合計をカウントしようとしています。正常に実行されるデータを定義するREPL行は次のとおりです。
val rowsByColumns =
List( List(false, true, false)
, List(true, true, true)
, List(false, true, false)
)
次に、次の行で「true」の発生をカウントしようとしました。そして、実行する代わりに、エラーが発生します。
val marks = (for(row <- rowsByColumns)
yield {row.foldLeft[Int](0)(_ + (if (_) 1 else 0))}).sum
<console>:8: error: wrong number of parameters; expected = 2
val marks = (for(row <- rowsByColumns) yield {row.foldLeft[Int](0)(_ + (i
f (_) 1 else 0))}).sum
^
関数のパラメーターを表す2つのアンダースコアがあるため、エラーを理解できませんでした。それで、私はこれをうまく実行するように書くことによって関数をより明確にしました:
val marks = (for(row <- rowsByColumns)
yield {row.foldLeft[Int](0)((sum, marked) => sum + (if (marked) 1 else 0))}
).sum
私の質問はこれです:なぜ私はあまり明確でないケースでエラーを受け取ったのですか?しかし、「単純化」を減らして関数をマップすると、正しく実行されますか?
あなたがこれについて私に与えることができるどんな洞察にも感謝します。