ハッシュ値を出力するときの順序の参照として使用する値の配列があります。配列の値が「きれい」になるように配列を変更したいと思います。配列を複製または複製し、値を変更すると、元のオブジェクトは変更されないままになると考えました。しかし(irbで)...
@arr = ['stuff', 'things']
a = @arr.clone
b = @arr.dup
したがって、少なくとも a と @arr は異なるオブジェクトです。
a.object_id == @arr.object_id
=> false
しかし、今では奇妙になります
a[0].capitalize!
a
=> ['Stuff', 'things']
@arr
=> ['Stuff', 'things'] ##<-what?
b
=> ['Stuff', 'things']## <-what???
わかりました... 1 つを変更すると他のものが変更されます。元に戻しますか?
a[0] = 'stuff'
a
=> ['stuff', 'things']
@arr
=> ['Stuff', 'things'] ## <- WHAT?????
完全を期すために b[1].capitalize! 同じ効果があり、3 つの配列の 2 番目の位置をすべて大文字にします
それで...大文字の最後の強打はそれをさらに強力にしますか? 他のオブジェクトにクロスオーバーするのに十分ですか?? これを行う他の方法は知っていますが、これは私には非常に奇妙に思えました。これは「浅いコピー」であることと関係があると思います。これを行うための最良の方法に関する提案はありますか?