inheritedメソッドの扱いを正しました
今まで、Miyakoでは、シーンクラスのインスタンスを作るときは
instance_evalを使っていました。
というのも、Class.inheritedメソッドの使い方をよくわかっていなかったから(^^;
で、そのinheritedメソッドの引数は、実はClassクラスだっていうのに気づいたのは
実は昨日(ヲイ)。
というわけで、次のようなコードで、インスタンス作れちゃうんですね。
module Test @@clist = {} def Test.clist return @@clist end def Test.create(name) return @@clist[name].new end class ClassX def ClassX.inherited(c) Test.clist[c.to_s] = c end end end class ClassY < Test::ClassX end t = Test.create("ClassY")
これでだいぶスマートになるよ〜。
というわけで、Miyako1.4.6では、こんな感じで、eval系のメソッドを駆逐しています
考えています(1.9ではeval系が遅くなると言う、まつもとゆきひろさんからの情報からです。詳細は、第21回Ruby/Rails勉強会@関西のログからどうぞ)。
パフォーマンス的には変わらないと思いますが、折角1.9で速くなりますからねぇ〜。
instance_evalとかでパフォーマンス悪くなるのはナンともと思いますです。