- 1. 概要
- 2. 代入
- 3. クローン clone
1. 概要
C言語やそれに類する言語をやってきて C# で一番びっくりするのが代入とクローンの問題です。
2. 代入
#!/usr/bin/env ruby
hash1 = Hash[ :foo => 'ふ~', :hoge => 'ふが' ]
hash2 = hash1
hash2[:hoge] = 'ほげ~'
puts("hash1 = #{hash1}")
puts("hash2 = #{hash2}")
を実行すると以下のようになります。
hash1 = {:foo=>"ふ~", :hoge=>"ほげ~"}
hash2 = {:foo=>"ふ~", :hoge=>"ほげ~"}
まさに「ほげ~」ってなっちゃうわけです。
古い言語をやっている者にとっては、代入でまるまる実態がコピーされているとは思わないので・・・。
3. クローン clone
実態を別物として、中身をまるまるコピーするには clone メソッドを使用します。
#!/usr/bin/env ruby
hash1 = Hash[ :foo => 'ふ~', :hoge => 'ふが' ]
hash2 = hash1.clone
hash2[:hoge] = 'ほげ~'
puts("hash1 = #{hash1}")
puts("hash2 = #{hash2}")
を実行すると以下のようになります。
hash1 = {:foo=>"ふ~", :hoge=>"ふが"}
hash2 = {:foo=>"ふ~", :hoge=>"ほげ~"}
|
|