例えばこんなクラスに対して、
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 件のコメント:
コメントを投稿