From: "MISHIMA, Hiroyuki" Date: 2011-08-04T14:54:12+09:00 Subject: [ruby-list:48256] 動的なクラス定義とトップレベルでのinclude 三嶋@長崎大と申します。 Module#const_missingを使った動的なクラス定義と,トップレベルでのinclude について質問があります。なお,ruby-1.8.7-p352およびruby-1.9.2-p290で同様 な結果でした。 "dynamic.rb" として以下のスクリプトを準備します。 module Foo module Bar class Hoge def self.test "Foo::Bar::Hoge.test" end end def self.const_missing(sym) module_eval %! class #{sym} def self.test "Foo::Bar:#{sym}.test" end end ! const_get(sym) end end end これに対し require './dymamic' include Foo Bar::Hoge.test # => "Foo::Bar::Hoge.test" Bar::Puyo.test # => "Foo::Bar::Puyo.test" はうまく動くのですが, require './dymamic' include Foo::Bar Hoge.test # => "Foo::Bar::Hoge.test" Puyo.test # => uninitialized constant Puyo (NameError) ではPuyo.testがエラーとなってしまいます。 後者でエラーを回避する方法はあるのでしょうか?(あるいは,おもいっきり勘 違いした質問になってましたらご容赦/ご指摘いただければ幸いです) 三嶋博之 -- 長崎大学大学院医歯薬学総合研究科人類遺伝学 三嶋 博之