代入と破壊

破壊しない代入と破壊する代入

a = [1, 2]

は配列[1, 2]に変数aを割り当てるだけなので普通の代入です。

a[0] = 0 

は配列を破壊する代入です。

例えば、

a = [1, 2]
b = a
a[0] = 0
p a # [0, 2]
p b # [0, 2]

となり、bまで影響を及ぼしてしまします。

配列 変数
a = [1, 2] [1, 2] a
b = a [1, 2] a, b
a[0] = 0 [0, 2] a, b

破壊する理由

[]=破壊的メソッドなのでインスタンスが破壊されます。

対策

上の例でbまで影響を及ぼしたくない場合は、インスタンスを複製します。

a = [1, 2]
b = a.clone
a[0] = 0
p a # [0, 2]
p b # [1, 2]
配列 変数
a = [1, 2] [1, 2] a
b = a.clone [1, 2] a
  [1, 2] b
a[0] = 0 [0, 2] a
  [1, 2] b

結論

破壊的メソッドを用いるときは、十分に注意しましょう。

正当なCSSです!