2009-09-23 7 views
48

Rubyでは、元の変更がコピーに影響しないように変数をコピーするにはどうすればよいですか?例えばRuby:同じオブジェクトを指さずに変数をコピーするにはどうしたらいいですか?

:この例では

phrase1 = "Hello Jim" 
phrase2 = phrase1 
phrase1.gsub!("Hello","Hi") 
p phrase2 #outputs "Hi Jim" - I want it to remain "Hello Jim" 

、二つの変数が同じオブジェクトを指します。私は2番目の変数のための新しいオブジェクトを作成したいが、それは最初に同じ情報を含んでいる。

答えて

80

phrase2 = phrase1.dup 

または

# Clone: copies singleton methods as well 
phrase2 = phrase1.clone 

あなたは全くのコピーを避けるためにも、この操作を行うことができます。

phrase2 = phrase1.gsub("Hello","Hi") 
+0

クローンが同じオブジェクトを指す場合 –

16

代わりに、あなたの例を使用する:

phrase2 = phrase1 

試してください:あなたが行うことができますコピーするよう

phrase2 = phrase1.dup 
+0

あなたの答えはかなり一般的だった私は尋ねた質問のために動作します。私が実際に解決しようとしている問題のためには動作していないようですが、これはここにあります:http://stackoverflow.com/questions/1465696/ruby-how-can-i-copy-this-global-変数。何か案は? –

+0

ところで、助けてくれてありがとう。 :) –

0
phrase1 = "Hello Jim" 
    # => "Hello Jim" 

phrase2 = Marshal.load(Marshal.dump(phrase1)) 
    # => "Hello Jim" 

phrase1.gsub!("Hello","Hi") 
    # => "Hi Jim" 

puts phrase2 
    # "Hello Jim" 

puts phrase1 
    # "Hi Jim" 
+6

回答するときに、ソリューションが役立つ理由を説明してください。それは、将来的に問題を理解し回避するために求めている人物を教育するものです。 –

関連する問題