« 2012年12月 | トップページ | 2013年6月 »

2013年1月

2013年1月12日 (土)

クラスメソッドをインスタンスメソッドから呼び出す黒魔術

Rubyでインスタンスメソッドからクラスメソッドを呼び出す時、

<クラス名>.<クラスメソッド名>
と書かなければなりません。
Rubyistの方には当たり前なのだと思うのですが、C++で育った自分としては、
「クラスメソッドは身内なんだし、わざわざレシーバを言わなくても解ってよ!」
って思いが強く、【なんとかならんのか?】と思って検索してみたところ、
が出てきた。
回答は「self.class.<クラスメソッド名> でいいんじゃね?」って事で、自分的には【なんかちがうね】【普通に書こう】って思ってた。

ところが今週、Yuguiさんの『初めてのRuby(電子版)』を電車の中で読み返していてはっとしました。そうだ、Rubyには黒魔術があるじゃないか!

class Hoge
   def method_missing(action, *args)
        self.class.__send__ action, *args
    end
    def Hoge.say(message)
        puts message
    end
    def hello
        say "Hello!"
    end
end
obj = Hoge.new
obj.hello
これで良さげ。
だけど、黒魔術はコードが理解しづらくなるから要注意ってことで。

| | コメント (0) | トラックバック (0)
|

« 2012年12月 | トップページ | 2013年6月 »