2009-09-23 8 views
48

W języku Ruby, w jaki sposób mogę skopiować zmienną, aby zmiany w oryginale nie wpłynęły na kopię?Ruby: w jaki sposób mogę skopiować zmienną bez wskazywania na ten sam obiekt?

Na przykład:

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

W tym przykładzie, dwie wartości wskazują na ten sam przedmiot; Chcę utworzyć nowy obiekt dla drugiej zmiennej, ale najpierw powinien zawierać te same informacje.

Odpowiedz

80

Co do kopiowania można zrobić:

phrase2 = phrase1.dup 

lub

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

Można to zrobić również w celu uniknięcia kopiowania w ogóle:

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

klonuje ten sam obiekt w szynach –

16

Korzystanie przykład zamiast:

phrase2 = phrase1 

Spróbuj:

phrase2 = phrase1.dup 
+0

działa Twoja odpowiedź na pytanie zapytałam, co było dość ogólnie. Wydaje się, że nie działa to dla problemu, który naprawdę próbuję rozwiązać, co jest tutaj: http://stackoverflow.com/questions/1465696/ruby-how-can-i-copy-this-global- zmienna. Jakieś pomysły? –

+0

Dzięki za pomoc, przy okazji. :) –

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

Odpowiadając, podaj wyjaśnienie, dlaczego twoje rozwiązanie pomaga. To kształci osobę proszącą, aby mogła zrozumieć i uniknąć problemu w przyszłości. –

Powiązane problemy