以下の内容はhttps://shuzo-kino.hateblo.jp/entry/2015/04/15/110656より取得しました。


Module#const_missingを使って、未定義な定数に対する動作を定義する

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ビットのメソッドを生成する際に活用しています
メタプログラミング……コワイ!




以上の内容はhttps://shuzo-kino.hateblo.jp/entry/2015/04/15/110656より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14