arrays - 在 Array Rails 中反映哈希值
问题描述
我有一个数组。
arr = []
我有一个哈希
hash = {a: 1, b: 2, c: 3}
在数组中添加哈希
arr << hash
arr的值为:
[{:a=>1, :b=>2, :c=>3}]
现在在哈希中添加值
hash[:d] = 4
现在看到数组的值是:
[{:a=>1, :b=>2, :c=>3, :d=>4}]
谁能给我解释一下。因为这有点令人困惑。预先感谢。
解决方案
因为hash
数组里面也有相同object_id
的,我们用一个例子来试试
2.6.3 :008 > arr = []
#=> []
2.6.3 :009 > hash = {a: 1, b: 2, c: 3}
#=> {:a=>1, :b=>2, :c=>3}
2.6.3 :010 > arr << hash
#=> [{:a=>1, :b=>2, :c=>3}]
2.6.3 :011 > arr.first.object_id
#=> 70240020878720
2.6.3 :012 > hash.object_id
#=> 70240020878720
如您所见,arr.first.object_id
两者hash.object_id
都具有相同的内容,object_id
因此您所做的任何更改hash
也将反映在内部的哈希中,arr
因为它是同一个对象。
现在,如果您不想看到这种行为,请改为创建一个新对象,使用dup
,试试这个
2.6.3 :001 > arr = []
#=> []
2.6.3 :002 > hash = {a: 1, b: 2, c: 3}
#=> {:a=>1, :b=>2, :c=>3}
2.6.3 :003 > arr << hash.dup
#=> [{:a=>1, :b=>2, :c=>3}]
2.6.3 :004 > arr.first.object_id
#=> 70094898530860
2.6.3 :005 > hash.object_id
#=> 70094898418620
2.6.3 :006 > hash[:d] = 4
#=> 4
2.6.3 :007 > arr
#=> [{:a=>1, :b=>2, :c=>3}]
2.6.3 :008 > hash
#=> {:a=>1, :b=>2, :c=>3, :d=>4}
dup
创建一个新对象,因此您将看不到在这两个地方所做的更改,因为两者都是不同的对象,具有不同的object_id
希望有帮助!
推荐阅读
- amazon-web-services - 发电机节流请求会成为错误还是只是重试?
- sql - 显示符合条件的字段
- typescript - 如何将 lint-stage 与 Husky 集成?
- python-3.x - 如何制作和 if-else 语句,对您键入的输入的数据类型进行分类
- powershell - 无权共享 Outlook 日历
- multithreading - Dymola 中的多线程使用会降低求解速度
- python - 如何正确打印 ASCII 艺术?
- python - 在 Visual Studio Code 上安装 python 库时出错
- symfony - 使用 Guzzle 或 Symfony httpClient 在本地调用 api
- ios - SwiftUI 提取 @ToolbarContent 到它自己的 var