以下是测试用例,我只想尝试使用dup
方法。但我意识到这种奇怪的行为。我找不到任何合理的解释。
class ObjectIdTest
attr_accessor :x, :y
def initialize
@x, @y = 1, 2
end
def object_ids
"x:#{@x.object_id}, y: #{@y.object_id}"
end
end
class ObjectIdTestChild < ObjectIdTest
attr_accessor :z
def initialize
@z = 3
end
def object_ids
super + " z: #{@z.object_id}"
end
end
oid1 = ObjectIdTest.new
oid2 = ObjectIdTestChild.new
p oid2.object_ids
oid3 = oid2.dup
p oid3.object_ids
输出: “x:4,y:4 z:7”
“x:4,y:4 z:7”
答案 0 :(得分:1)
1 - Fixnumber以外的对象具有更大的值。例如:
"hello".object_id #=> 70256148388440
0x3FFFFFFFF.object_id #=> 34359738367
2和3 - Althought dup
生成一个对象的浅表副本,在这种情况下,该对象碰巧代表相同的Fixnums。使用Fixnums,相同的数字始终具有相同的object_id。 Ruby Object