const_missing

const_missing

ri

 --------------------------------------------------- Module#const_missing
      mod.const_missing(sym)    => obj
 ------------------------------------------------------------------------
      Invoked when a reference is made to an undefined constant in _mod_.
      It is passed a symbol for the undefined constant, and returns a
      value to be used for that constant. The following code is a (very
      bad) example: if reference is made to an undefined constant, it
      attempts to load a file whose name is the lowercase version of the
      constant (thus class  Fred  is assumed to be in file  fred.rb ). If
      found, it returns the value of the loaded class. It therefore
      implements a perverse kind of autoload facility.
 
        def Object.const_missing(name)
          @looked_for ||= {}
          str_name = name.to_s
          raise "Class not found: #{name}" if @looked_for[str_name]
          @looked_for[str_name] = 1
          file = str_name.downcase
          require file
          klass = const_get(name)
          return klass if klass
          raise "Class not found: #{name}"
        end
 

refe

 Module#const_missing
 --- const_missing(name)       ruby 1.8 feature
 
     定義されていない定数を参照したときに Ruby がこのメソッドを呼び
     ます。参照した定数名の Symbol引数に渡されます。
 
     デフォルトではこのメソッドは例外 NameError を発生させます。
 
         class Foo
           def Foo.const_missing(id)
             warn "undefined constant #{id.inspect}"
           end
 
           Bar
         end
         Foo::Bar
 
         # => undefined constant :Bar
              undefined constant :Bar