小编KCM*_*KCM的帖子

ruby:无法理解内存地址

当我研究 clone vs dup 时,我尝试复制一个如下所示的对象:

a = {'key1' => 1, 'key2' => {'key3' => 3, 'key4' => 4}}.freeze
b = a.clone
c = a.dup

a['key1'] = 32
# => RuntimeError: can't modify frozen Hash

b['key1'] = 32
# => RuntimeError: can't modify frozen Hash

c['key1'] = 32
# => 32
Run Code Online (Sandbox Code Playgroud)

大写结果是,a 和 b 值共享内存,但是当我检查变量 object_id 时,它返回不同的结果:

a.object_id ## original
=> 70219554622880
b.object_id ## clone
=> 70219554589820
Run Code Online (Sandbox Code Playgroud)

但在哈希键 object_id 中是相同的。

a['key1'].object_id ## original
=> 3
b['key1'].object_id ## clone
=> 3
c['key1'].object_id …
Run Code Online (Sandbox Code Playgroud)

ruby

3
推荐指数
1
解决办法
64
查看次数

标签 统计

ruby ×1