かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

メソッドを消す

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