我正在使用Ruby 2.4。 在复制哈希的内容时,我对整个引用与值的事情感到困惑。 如何在不更改哈希的引用(内存地址?(的情况下将一个哈希的内容复制到另一个哈希中? 以下是我遇到的问题的示例....
2.4.0 :003 > def copy_hash(h)
2.4.0 :004?> new_hash = {"a" => 1}
2.4.0 :005?> h = new_hash
2.4.0 :006?> end
=> :copy_hash
2.4.0 :007 > h = {"b" => 2}
=> {"b"=>2}
2.4.0 :008 > copy_hash(h)
=> {"a"=>1}
2.4.0 :009 > h
=> {"b"=>2}
在函数中,我将参数分配给新的哈希...
h = new_hash
但是一旦函数返回,原始哈希就保持不变。 更改函数中的哈希的正确方法是什么,以便在它返回时参数的值也会更改? 也就是说,如果我的哈希值开始为
{"b" => 2}
我希望值是
{"a"=>1}
在我调用"copy_hash"函数之后。
您可以使用
Hash#replace
来替换哈希的内容:
def copy(h)
new_hash = { 'a' => 1 }
h.replace(new_hash)
end
h = { 'b' => 2 }
copy(h)
h == { 'a' => 1 } # => true