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 でオブジェクトをディープ コピーする最も効率的な方法は何ですか?を参照してください。ディープコピーを効率的に行う方法についての良い議論のために。

この 1 つの値だけをディープ クローンする必要がある場合は、次のようにします。

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