̃Gg[͂ĂȃubN}[Nɒlj

Ruby :: クラス変数、インスタンス変数、特異メソッド



クラス変数

@@ で始まる変数はクラス変数。
クラス変数は、そのクラスやサブクラス、それらのインスタンスで共有されるグローバル変数であるとみなすことができます。

class Foo
  @@F = 0
  def foo
    @@F += 1
    print @@F, "\n"
  end
end


インスタンス変数

@ で始まる変数はインスタンス変数。

class Foo
  @a = 123 # (1)
  def foo
    p @a  # (2) ... 123でなくnilになる。
  end
end

(1)が「クラスのインスタンス変数」、(2)は「通常のインスタンス変数」。
(2)はクラスFooのインスタンスに属するのに対し、(1)はFooというクラスオブジェクト(Classのインスタンス)に属します。
インスタンスメソッドからクラスのインスタンス変数に直接アクセスすることはできません。
上のように初期化されていないインスタンス変数とみなされ、nilになります。


特異メソッド

特異メソッドは特定のインスタンスに固有のメソッド。
以下のように使う。

foo = Foo.new
def foo.hello
  print "Hello\n"
end
foo.hello

クラスにあるメソッドを追加したいが、わざわざサブクラスを作るほどのことでもない、といった場合に有効です。




programming/ruby/etc/class_instance_variables.txt