2012年4月19日木曜日

Rubyでクラス定数を参照

Rubyでクラスの外からクラス定数を参照する場合。
例えばこんなクラスに対して、
class Foo
  C1 = 'constant value #1'
  C2 = 'constant value #2'
  C3 = 'constant value #3'
end

Fooの外からC1, C2, C3を参照したければ、単純に
p Foo::C1
p Foo::C2
p Foo::C3
こんな感じでアクセスすればいい。が、アクセスしたい定数名を動的に決定したい場合はどうするか。
まあ、eval系メソッドを使えば何でもできるのだが、もう少し行儀よく真面目にやるにはconst_getを使う。
(1..3).each do |i|
  p Foo.const_get("C#{i}")
end
こうすればC1, C2, C3という定数名を実行時に生成しながらアクセスできる。

他にも、定数を定義するconst_set、定義してあるかどうかを確かめるconst_defined?、定義を取り消すremove_constがある。いずれもModuleモジュールのメソッドなので、全てのクラスやモジュールに対して使用可能。

const_get, const_set, remove_const。命名規則が気持ち悪いなぁ。

0 件のコメント:

コメントを投稿