Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Module | method_undefined

概要

Module#method_undefined(name) -> ()

詳細

このモジュールのインスタンスメソッド name が Module#undef_method によって削除されるか、
undef 文により未定義にされると、インタプリタがこのメソッドを呼び出される。

要はメソッドの undef 動作に対するフック。

サンプルコード
class Hoge
  def self.method_undefined(name)
    puts "method_undefined => #{name}"
  end

  %w{hoge hige hage}.each do |m|
    define_method m.to_sym do
      puts m
    end
  end

  print instance_methods(false), "\n"
  undef hoge, hige
  print instance_methods(false), "\n"
  undef_method :hage
  print instance_methods(false), "\n"
end

hoge = Hoge.new

出力

[:hoge, :hige, :hage]
method_undefined => hoge
method_undefined => hige
[:hage]
method_undefined => hage
[]