Подтвердить что ты не робот

Ruby: как я могу скопировать переменную без указания на один и тот же объект?

В Ruby, как я могу скопировать переменную, так что изменения в оригинале не влияют на копию?

Например:

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

В этом примере две переменные указывают на один и тот же объект; Я хочу создать новый объект для второй переменной, но сначала должен содержать ту же информацию.

4b9b3361

Ответ 1

Что касается копирования, вы можете сделать:

phrase2 = phrase1.dup

или

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

Вы можете сделать это, чтобы избежать копирования вообще:

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

Ответ 2

Используя ваш пример, вместо:

phrase2 = phrase1

Try:

phrase2 = phrase1.dup

Ответ 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"