我遇到的问题是我无法在克隆的哈希中替换字符串而不影响其原始字符串。我最好用一个例子来解释:
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。
这是一个已知问题(甚至是一个功能)吗?或者我做错了什么?
答案 0 :(得分:3)
clone
只生成数组的浅表副本,因此复制元素而不是克隆自身。有关如何有效执行深层复制的详细讨论,请参阅What's the most efficient way to deep copy an object in Ruby?。
如果你只需要深度克隆这个值:
product_attributes = raw_attributes.clone
product_attributes[:code] = product_attributes[:code].clone