Rubyインスタンス変数 - Silver/Gold試験対策
クラスのインスタンス上で定義できる変数。 インスタンスメソッド内から参照できる。
class A def initialize @a = 0 end def setter(num) @a += num end def getter @a end end a = A.new p a.getter #=> 0 a.setter(2) a.setter(2) p a.getter #=> 4
getterとsetterをメソッド定義しなくても 以下のような方法がある
class B attr_accessor(:hoge, :fuga) def bar @hoge end def baz @fuga end # インスタンス変数がattr_accessorによってメソッド化されている def foo hoge end def hah fuga end end p B.instance_methods(false) #=> [:hoge, :fuga, :hoge=, :fuga=]。getしたり、値をセットできるということ b = B.new b.hoge = 10 p b.hoge #=> 10 p b.bar #=> 10 p b.baz #=> nil p b.foo #=> 10 p b.hah #=> nil
さらに以下のように外部からセット、ゲットする方法もある
A = Class.new a = A.new a.instance_variable_set(:@a,1) p a.instance_variable_get(:@a)