09/04/06 20:43:51
>>91
いただいたコードを見ると、const_getでautoloadしないわけではなかったのですね。
今一度自分のコードを見直してみたところ、const_getでautoloadできました。(解決!)
最初、Javaのように文字列からクラスを生成する書き方ばかり想像していて
>>88で説明のための適当なコードを載せたばかりに、余計な手間をおかけしました。
いまさらですができているコードを書いておきます。
#testfactory.rb
module TestFactory #モジュール内のメソッドは公開済み
autoload :TestClass1, "testclass1.rb"
autoload :TestClass2, "testclass2.rb"
def get_instance(classname, *args) #インスタンスを返す
# eval("#{classname}.new(*args)) #>>88の時点のコード
# require classname.downcase #>>90の時点のコード(レシーバ違いでrequireが必要だった)
# Method.const_get(classname).new(*args) #requireしないと=> uninitialized constant Method::TestClass1
self.const_get(classname).new(*args) #現在のコード(問題なし)
end
#その他の同種のメソッド
def get_class(classname); self.const_get(classname); end #クラスを返す
def method_missing(classname, *args); self.const_get(classname).new(*args); end #同じくインスタンスを返す
end