コードを見ると、foldl
その構文を理解するのは困難です。次に例を示します。
def lstToMap(lst:List[(String,Int)], map: Map[String, Int] ):Map[String, Int] = {
(map /: lst) (addToMap)
}
/:
中置演算子ですか?(map /: lst)
部分適用とはどういう意味ですか?なぜ私はこのように呼ぶことができないのですか?
`/: map lst addToMap`
文字で終わるメソッド名は、:
バインドされているインスタンスの左側で使用できます(つまり、右側に関連付けられます)。この場合、/:
はのメソッドList
です。Scaladocによると:
注:/:はfoldLeftの代替構文です。z /:xsはxsfoldLeftzと同じです。
あなたが書いたものに代わるものは次のようになります:
lst./:(map)(addToMap)
編集:およびfoldLeftを使用した別の代替手段:
lst.foldLeft(map)(addToMap)
はい、/:
中置演算子として使用できます。ただし、fold操作には次の3つの引数があります。
infixを使用すると、シーケンス(レシーバー)と初期値の3つの引数のうち2つしか指定できません。部分適用であるという事実(map /: lst)
は、あなたがまだ議論を欠いているという事実を反映しています。これは、初期値1から始まる数列の積の例です。
(1 /: xs)(_*_)
Scalaは関数リテラルの中括弧をサポートしているので、これを使用して関数の引数を関数の本体のように見せることもできます。
(1 /: xs) { (x, y) =>
x * y
}