あなたは不変性の2つの異なる '用法'を混ぜています。
何かに対して可変(var)または不変(val)参照を持つことができ、何かを変更可能または不変にすることができます。
例:
var x = 3
x = 4 // it works, `x` can be reassigned
val y = 3
y = 4 // it fails, `y` can't be reassigned
その '何か' は、参照は」内部状態を持っているときに問題があります。 Int
またはString
のようなプリミティブ型にはこの問題はありませんが、どのクラスでも使用できます。スカラコレクションは、mutable collectionsとimmutable collectionsがあるため、新しいスカラープログラマーにとって共通の痛みです。
違いは、不変なコレクションの操作では新しいコレクションが返されますが、元のものはそのまま残り、変更可能なコレクションではコレクション自体が変更されるという点です。
ご使用のスカラーMap
は不変のマップであり、そのようなメソッドはありません。 myMap ++ (key -> value)
を実行して、新しいマップを取得することができます。
オブジェクトの可変性/状態を持つ参照で可変性を混在させると、より大きな混乱が生じます。あなたはどんな疑問が私/私たちに知らせている場合
val x1 = scala.collection.mutable.ListBuffer(1,2,3) // immutable reference to mutable object
// please, never use this in real code
var x2 = scala.collection.mutable.ListBuffer(1,2,3) // mutable reference to mutable object
// please, try to use this as much as possible
val x3 = scala.collection.immutable.List(1,2,3) // immutable reference to immutable object
var x4 = scala.collection.immutable.List(1,2,3) // mutable reference to immutable object
ので、我々は
putは、jhmの参照を変更するのではなく、値を追加することです.2番目のインスタンスでは、不変のマップを作成してからputを実行し、nmapのインスタンスを変更します。 – SMA