かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

メソッドを消す

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メソッドと組み合わせると、楽に実装できるくらいだべ。