インスタンス変数の初期化と宣言を理解しようとしていました。そうすることで、以下のコードを試しました。しかし、私の思考経路の半分で、次のような興味深いものを見つけました。
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
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"
* なぜ と の object_id がこんなに違うの@age
か@name
? *