Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/72-1f17e874

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Perlは深く、Rubyは浅い


%hash1=(
'hoge'=>1,
'piyo'=>2,
'fuga'=>3
);

%hash2=%hash1;

$hash1{'hoge'}=10;

foreach (keys %hash1){
print "$_ : $hash1{$_}\n";
}

print "\n";

foreach (keys %hash2){
print "$_ : $hash2{$_}\n";
}

実行結果
piyo : 2
fuga : 3
hoge : 10

piyo : 2
fuga : 3
hoge : 1



hash1={
'hoge'=>1,
'piyo'=>2,
'fuga'=>3
}

hash2=hash1

hash1['hoge']=10

hash1.each do |key,val|
puts key + ' : ' + val.to_s
end

puts

hash2.each do |key,val|
puts key + ' : ' + val.to_s
end

実行結果
fuga : 3
hoge : 10
piyo : 2

fuga : 3
hoge : 10
piyo : 2



上がperlで下がruby。
ハッシュhoge2にhoge1を代入した後、hoge1の値を変える。
rubyはshallow copy(浅いコピー)なので、hoge1もhoge2も同じ値になるが、
perlはdeep copy(深いコピー)なので、hoge1だけ値が変わる。


以前も整理したのに、rubyがdeep copyである事をすっかり忘れてて、はまった。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/72-1f17e874

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。