Ruby のインスタンス変数についてのメモ

Rubyインスタンス変数は、オブジェクトの内部状態でもあるし、オブジェクトに特定されたクラス内のグローバル変数みたいなものでもあるのだな(言い方に問題あり?)。オブジェクトに関係ないクラス内のグローバル変数がクラス変数ということか。

class A
  def initialize
    @a = 3
  end
  attr_accessor :a

  def out
    puts @a
    inc
  end
  
  def inc
    @a += 1
  end
end

i = A.new
i.out   #=>3
i.out   #=>4
p i   #=> #<A:*** @a=5>
i.a = 10
i.out   #=>10
i.inc
i.out   #=>12

incメソッドは、クラスの中からも外からも呼ばれている。中からは裸で、外からはレシーバーを付けて呼ばれていることに注意。

ここでは、インスタンス変数は殆どクラス内のグローバル変数のように使われている。