我试图理解实例变量的初始化和声明。这样做我尝试了下面的代码。但是在我思考的一半中,我得到了一些有趣的东西,如下所示:
class Person
attr_accessor :name,:age
def initialize(var)
@sex = var
end
def objctid
p ":age -> #{@age.object_id}"
p ":name -> #{@name.object_id}"
p ":sex -> #{@sex.object_id}"
end
end
#=> nil
ram = Person.new('M')
#=> #<Person:0x2109f48 @sex="M">
ram.objctid
#":age -> 4"
#":name -> 4"
#":sex -> 17321904"
#=> ":sex -> 17321904"
Object#instance_variable_set
我到现在都没用。
符号如何获取内存引用:age
,:name
因为我直到上面才初始化它们?
为什么object_id
这些实例变量相同?
ram.instance_variable_set(:@age,'14')
#=> "14"
现在在下面的代码中,@age
s object_id 像我Object#instance_variable_set
以前设置的那样更改@age
。
ram.objctid
#":age -> 17884656"
#":name -> 4"
#":sex -> 17321904"
#=> ":sex -> 17321904"
ram.instance_variable_set(:@name,'Lalu')
#=> "Lalu"
ram.objctid
#":age -> 16884288"
#":name -> 17041356"
#":sex -> 17625228"
#=> ":sex -> 17625228"
@age
* 为什么和的object_id 如此不同@name
?*