ruby - 为什么清除我的哈希值时也会清除我的哈希值数组?

标签 ruby arrays hash

ruby-1.9.2-p180 :154 > a = []
 => []
ruby-1.9.2-p180 :154 > h = {:test => "test"}
 => {:test=>"test"} 
ruby-1.9.2-p180 :155 > a << h
 => [{:test=>"test"}] 
ruby-1.9.2-p180 :156 > h.clear
 => {} 
ruby-1.9.2-p180 :157 > a
 => [{}] 

我很困惑,尤其是因为我可以在不影响数组的情况下更改散列的元素。但是当我清除哈希时,数组会更新并清除其哈希内容。谁能解释一下?

最佳答案

当你做 a << h ,您实际上是将 h 的引用传递给 a。因此,当您更新 h 时,a 也会看到这些更改,因为它包含引用而不是该值的副本。

为了使其在 a 中不发生变化,您必须将 h 的克隆值传递给 a。

一个例子是:

a << h.clone

关于ruby - 为什么清除我的哈希值时也会清除我的哈希值数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372704/

相关文章:

javascript - 如何在页面刷新时随机交换图像横幅?

iis - 如何在 IIS 中查找加密和哈希算法信息?

php - 2016年存储密码的最佳算法

python - 使用分隔符将字符串/字符数组连接成单个字符串[不使用理解、映射等]

java - 字符串到字节数组类型转换

algorithm - Go:用于字符串比较的多项式指纹

ruby-on-rails - Ruby HTTPS 发布问题

ruby - 如何在 Ruby 中设置 TLS 上下文选项(如 OpenSSL::SSL::SSL_OP_NO_SSLv2)

c# - Ruby 中 C# 的 int.TryParse() 方法等同于什么?

ruby - 高效的 Ruby 和 Node.js 通信/IPC