2009年06月06日

Rubyの定数の動きを確認する

Rubyの定数の動きを把握していなかったので確認をする。

クラス内で宣言された場合はそのクラス内がスコープになり、クラスの外で宣言された場合はObjectクラスの定数になる。

# クラスの外で宣言
HOGE = "uga"

# クラス内で定数を宣言
class Test1
  HOGE = "hoge"
  def initialize
    p HOGE #=> hoge
  end
end

# 継承した場合、定数もちゃんと継承される
class Test2 < Test1
  def initialize
    super  #=> hoge
    p HOGE #=> hoge
  end
end

# 継承して同名の定数を宣言した場合は、上書きされる
# superした場合は継承元を見る
class Test3 < Test1
  HOGE = "fuga"
  def initialize
    super  #=> hoge
    p HOGE #=> fuga
  end
end

# 定数を宣言してない場合は、Objectの定数を見る
class Test4
  def initialize
    p HOGE #=> uga
  end
end


真性オブジェクト指向言語を名乗る(?)だけあって、非常にイメージしやすい動き。こういうところは好きです。