2

コードを見ると、foldlその構文を理解するのは困難です。次に例を示します。

  def lstToMap(lst:List[(String,Int)], map: Map[String, Int] ):Map[String, Int] = {
    (map /: lst) (addToMap)
  }

/:中置演算子ですか?(map /: lst)部分適用とはどういう意味ですか?なぜ私はこのように呼ぶことができないのですか?

`/:  map lst addToMap`
4

2 に答える 2

5

文字で終わるメソッド名は、:バインドされているインスタンスの左側で使用できます(つまり、右側に関連付けられます)。この場合、/:はのメソッドListです。Scaladocによると:

注:/:はfoldLeftの代替構文です。z /:xsはxsfoldLeftzと同じです。

あなたが書いたものに代わるものは次のようになります:

lst./:(map)(addToMap)

編集:およびfoldLeftを使用した別の代替手段:

lst.foldLeft(map)(addToMap)
于 2013-03-25T00:33:39.133 に答える
2

はい、/:中置演算子として使用できます。ただし、fold操作には次の3つの引数があります。

  1. 折りたたむシーケンス
  2. 削減の初期値
  3. 折りたたみに使用する機能

infixを使用すると、シーケンス(レシーバー)と初期値の3つの引数のうち2つしか指定できません。部分適用であるという事実(map /: lst)は、あなたがまだ議論を欠いているという事実を反映しています。これは、初期値1から始まる数列の積の例です。

(1 /: xs)(_*_)

Scalaは関数リテラルの中括弧をサポートしているので、これを使用して関数の引数を関数の本体のように見せることもできます。

(1 /: xs) { (x, y) =>
    x * y
}
于 2013-03-25T03:11:59.343 に答える