From: Masa Date: 2011-08-04T16:07:28+09:00 Subject: [ruby-list:48257] Re: 動的なクラス定義とトップレベルでのinclude 畠山です。 結論からいいますと、二番目のエラーが出たのはPuyoがFoo::Barの定数としてではなくトップレベルの定数だと認識されたためだと思います。 トップレベルの未定義定数の場合はObject.const_missingが呼ばれますので次のように定義すると両方とも実行されます。(実用的には二度同じ定義をするのはあまりよろしくないのでもう少し賢い方法はどなたかの回答を期待します...) module Foo module Bar class Hoge def self.test "Foo::Bar::Hoge.test" end end def self.const_missing(sym) p self module_eval %! class #{sym} def self.test "Foo::Bar::#{sym}.test" end end ! const_get(sym) end def Object.const_missing(sym) p self module_eval %! class #{sym} def self.test "Foo::Bar::#{sym}.test" end end ! const_get(sym) end end end ちなみに require 'dynamic' include Foo::Bar p Puyo.test # => "Foo::Bar::Puyo.test" p Foo::Bar::Puyo.test # "Foo::Bar::Puyo.test" とすると一つめと二つ目でselfの値が違っているのが分かります。 参考までに。 畠山