Ruby: Wie kann ich eine Variable kopieren, ohne auf dasselbe Objekt zu zeigen?


73

Wie kann ich in Ruby eine Variable so kopieren, dass Änderungen am Original keine Auswirkungen auf die Kopie haben?

Zum Beispiel:

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

In diesem Beispiel zeigen die beiden Variablen auf dasselbe Objekt. Ich möchte ein neues Objekt für die zweite Variable erstellen, aber es enthält anfangs dieselben Informationen.

Antworten:


106

Zum Kopieren haben Sie folgende Möglichkeiten:

phrase2 = phrase1.dup

oder

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

Sie können dies auch tun, um das Kopieren zu vermeiden:

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


3
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"

7
Erklären Sie bei der Beantwortung, warum Ihre Lösung hilfreich ist. Das bildet die fragende Person aus, damit sie das Problem in Zukunft verstehen und vermeiden kann.
der Blechmann
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.