Ruby勉強

インターネットの企画職な人がプログラミングを勉強するブログ

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)