1

我面临一个问题,我无法在不影响其原始内容的情况下替换克隆哈希中的字符串。我最好用一个例子来解释:

product_attributes = raw_attributes.clone

# do some stuff on product_attributes like removing hash elements using "select!"

puts product_attributes[:code]
# => 64020-001
puts raw_attributes[:code]
# => 64020-001

product_attributes[:code].gsub!(/[\/|\-][0-9\.]*$/, "")

puts product_attributes[:code]
# => 64020
puts raw_attributes[:code]
# => 64020

我在 OSX 上使用 Ruby 1.9.3p327。

这是一个已知问题(甚至是一个功能)吗?还是我做错了什么?

4

1 回答 1

3

clone只制作数组的浅拷贝,因此元素被复制而不是克隆自己。请参阅在 Ruby 中深度复制对象的最有效方法是什么?关于如何有效地进行深拷贝的一些很好的讨论。

如果您只需要深度克隆这个值:

product_attributes = raw_attributes.clone
product_attributes[:code] = product_attributes[:code].clone
于 2012-12-06T20:25:08.687 回答