Module#const_missingは、未定義な定数を参照した際に呼び出されるメソッドです。
こんな感じで使います。
class Test1 def Test1.const_missing(name) mapping = { /^Func(\d+)$/ => :func } mapping.each_pair do |rgx, args| if rgx =~ name.to_s return "Defined!" end end end end p Test1::Func1
これを呼び出すと
$ ruby const_missing.rb "Defined!"
てな感じで、出力されます。
実用的な話
とはいえ、単に文字出すだけでは何の旨味も無いです。
実際には、ここでmodule_evalやclass_evalで子分クラスを作成する用途でつかいます。
例えばBindataでは、2ビットやら7ビットのメソッドを生成する際に活用しています。
メタプログラミング……コワイ!