Ruby:如何在不指向同一对象的情况下复制变量?

Ruby:如何在不指向同一对象的情况下复制变量?,ruby,Ruby,在Ruby中,如何复制一个变量,使对原始变量的更改不会影响副本 例如: phrase1 = "Hello Jim" phrase2 = phrase1 phrase1.gsub!("Hello","Hi") p phrase2 #outputs "Hi Jim" - I want it to remain "Hello Jim" 在这个例子中,两个变量指向同一个对象;我想为第二个变量创建一个新对象,但它最初包含相同的信息。使用您的示例,而不是: phrase2 = phrase1 尝试: 至

在Ruby中,如何复制一个变量,使对原始变量的更改不会影响副本

例如:

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

在这个例子中,两个变量指向同一个对象;我想为第二个变量创建一个新对象,但它最初包含相同的信息。

使用您的示例,而不是:

phrase2 = phrase1
尝试:


至于复制,您可以执行以下操作:

phrase2 = phrase1.dup

您也可以这样做以避免复制:

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

你的回答适用于我提出的问题,这个问题相当笼统。不过,这似乎对我真正想解决的问题不起作用,这就是:。有什么想法吗?顺便说一句,谢谢你的帮助。:)回答问题时,请解释您的解决方案有帮助的原因。这会教育提出问题的人,使他们能够理解并避免将来的问题。
# Clone: copies singleton methods as well
phrase2 = phrase1.clone
phrase2 = phrase1.gsub("Hello","Hi")
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"