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

 クラウディア
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=>"ほげ~"}
earthcar(アースカー)