2.11 ruby - 基本的な文法 - 代入とクローン

 
2.11.1 概要
2.11.2 代入
2.11.3 クローン clone

2.11.1 概要

 C言語やそれに類する言語をやってきて C# で一番びっくりするのが代入とクローンの問題です。

2.11.2 代入


#!/usr/bin/env ruby

hash1 = Hash[ :foo => 'ふ~', :hoge => 'ふが' ]

hash2 = hash1
hash2[:hoge] = 'ほげ~'

puts("hash1 = #{hash1}")
puts("hash2 = #{hash2}")
 を実行すると以下のようになります。

> ./ソースファイル名.rb
hash1 = {:foo=>"ふ~", :hoge=>"ほげ~"}
hash2 = {:foo=>"ふ~", :hoge=>"ほげ~"}
 まさに「ほげ~」ってなっちゃうわけです。  古い言語をやっている者にとっては、代入でまるまる実態がコピーされているとは思わないので・・・。

2.11.3 クローン clone

 実態を別物として、中身をまるまるコピーするには clone メソッドを使用します。

#!/usr/bin/env ruby

hash1 = Hash[ :foo => 'ふ~', :hoge => 'ふが' ]

hash2 = hash1.clone
hash2[:hoge] = 'ほげ~'

puts("hash1 = #{hash1}")
puts("hash2 = #{hash2}")
 を実行すると以下のようになります。

> ./ソースファイル名.rb
hash1 = {:foo=>"ふ~", :hoge=>"ふが"}
hash2 = {:foo=>"ふ~", :hoge=>"ほげ~"}