下面是测试用例,我只是想用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”
- 通常对象 id 较长(如70322728590900),为什么它们这么小?(他们是亲戚还是类似的东西?)
- 为什么x和y的对象 id 相同?
- 为什么oid2和oid3的实例变量具有相同的对象 id?