サイログ。

~雑多な記事置き場~

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とかでパフォーマンス悪くなるのはナンともと思いますです。