私の現在のユースケースは非常に些細なので、変更可能または不変のいずれかのマップがそのトリックを行います。変更可能なスカラ不変マップ、いつ変更可能ですか?
はその後、同様
def doFoo(foo: String = "default", params: Map[String, Any] = Map()) {
val newMap =
if(someCondition) params + ("foo" -> foo) else params
api.doSomething(newMap)
}
問題の地図は、一般的にあるかもしれませんほとんどで、非常に小さいであろう不変の地図を取り、サードパーティのAPIメソッドを呼び出し不変の地図を取る方法を、持っていますケースクラスインスタンスの埋め込みリスト、数千のエントリまでしたがって、この場合も、不変になることにほとんど影響がないと仮定します(つまり、newMap valコピーを介して本質的に2つのインスタンスを持つ)。
それでも、マップをコピーして、いくつかのk-> vエントリが追加された新しいマップを取得するだけです。
私はタックしたい項目にparams.put("bar", bar)
などをつけてから、params.toMap
に変えてapi呼び出しのために不変にすることができます。これはオプションです。変更可能なマップをインポートして渡す必要があります。これは、Scalaのデフォルトの不変のマップに比べると面倒です。
変更可能なマップを不変のマップに使用することが正当化されたか良い習慣であるかについての一般的なガイドラインは何ですか?
おかげ
EDIT ので、不変のマップ上の追加操作がDHGのとのために問題を解決し、完全なコピーが作成されていないことを@ニコラスの主張、@を確認し、一定の時間近くかかることが表示されます具体的なケースが提示された。
[極端な賢さ:Scalaの機能データ構造](http://www.infoq.com/presentations/Functional-Data-Structures-in-Scala)を参照してください。 –
ありがとう、今それを見て – virtualeyes