私は変更可能なマップで出現を数えてきました:
var bar = collection.mutable.Map[Int, Int]().withDefaultValue(0)
キーが既に存在するbar(a) += b
かどうかに関係なく、問題なく動作するようになりました (存在する場合は追加されます)。a
bar
可変マップの可変マップで同じことを試しました:
var foo = collection.mutable.Map[Int, collection.mutable.Map[Int, Int]]().
withDefaultValue(collection.mutable.Map().withDefaultValue(0))
foo(a)(b) += x
シンタックス シュガーなしではどのように見えますか?
Scalaのシンタックス シュガーのすべてのインスタンスは何ですか? 私はそれが次のように展開すると仮定します:
foo.apply(a).put(b, foo.apply(a).apply(b) + x)
しかし、なぜこれはfoo
導入例のようにそれ自体を更新しないのでしょうか (つまり、キーが以前に存在しなかった場合foo
、専用の値がありません)。a
編集:Perseidsが指摘したように、foo(a)(b) += x
変更可能なデフォルト値が変更されます。これは望ましい機能ですか?DaoWengetOrElseUpdate
の提案どおりに使用することが、両方の問題を克服するための最良の方法のようです。しかし、これは type の関数ではうまく機能しますが、 type の関数では非常に扱いにくくなります。だから私はまだどんな提案でもうれしいです!Int => Int => Int
Int => Int => Int => Int => Int