Ruby勉強

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

Rubyクラスインスタンス変数 - Silver/Gold試験対策

クラスインスタンス変数は、 クラス直下で定義する。クラス内参照・代入はできるが、 サブクラスからは参照できない。

class A
  @a = 1
  def self.hoge
    p @a
  end
end
A.hoge  #=> 1。クラスメソッドからは参照できる

class B
  @b = 1
  def hoge
    p @b
  end
end
b = B.new
b.hoge #=> nil。インスタンスメソッドからは参照できない

class C < A
end
C.hoge #=> nil 継承できない

外部から、クラスインスタンス変数を参照する方法はクラスをレシーバとしてインスタンス変数を取得する

class A
  @a = 1
  def hoge
    self.class.instance_variable_get(:@a)
  end
end
A.instance_variable_get(:@a) #=> 1
A.new.hoge #=> 1