【问题标题】:Using gsub on cloned hash in Ruby modifies original在 Ruby 中对克隆的哈希使用 gsub 会修改原始哈希
【发布时间】:2012-11-24 23:08:31
【问题描述】:

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

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。

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

【问题讨论】:

标签: ruby clone


【解决方案1】:

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

【讨论】:

  • 哦,确实有道理。谢谢你。我取了相当戏剧性的标题:)我最好去看书。
猜你喜欢
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2011-02-07
  • 2016-12-16
  • 2019-10-28
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多