かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

メソッドを消す

undefを使ってメソッドを消せるらしい。
やってみる!

class Hoge
    def method_missing obj, *args, &block
        puts "missing"
    end
end

h = Hoge.new
puts h.to_s

実行結果

#<Hoge:0x29383c0>

ちゃんと出てる。

これでto_sをundefすると

class Hoge
    
    undef to_s
    
    def method_missing obj, *args, &block
        puts "missing"
    end
end

h = Hoge.new
puts h.to_s

実行結果

missing
nil


お〜っちゃんと消せた!
基本的に使わないな…。
使うとしたら

  1. あるメソッドを消す
  2. method_missingで別クラスへ委譲する

とかくらい?
これなら他にも書き方はあるだろうけど。
sendメソッドと組み合わせると、楽に実装できるくらいだべ。