クラスメソッドをインスタンスメソッドから呼び出す黒魔術
Rubyでインスタンスメソッドからクラスメソッドを呼び出す時、
<クラス名>.<クラスメソッド名>
と書かなければなりません。
Rubyistの方には当たり前なのだと思うのですが、C++で育った自分としては、
「クラスメソッドは身内なんだし、わざわざレシーバを言わなくても解ってよ!」
って思いが強く、【なんとかならんのか?】と思って検索してみたところ、
が出てきた。
回答は「self.class.<クラスメソッド名> でいいんじゃね?」って事で、自分的には【なんかちがうね】【普通に書こう】って思ってた。
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
これで良さげ。
だけど、黒魔術はコードが理解しづらくなるから要注意ってことで。
| 固定リンク
この記事へのコメントは終了しました。

コメント