如何在不更改哈希指向的内存地址的情况下将内容复制到哈希中



我正在使用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

相关内容

最新更新