Rubyリファレンス: Home

method_missing

Edit   History

標準クラス・モジュール > Object > method_missing

def method_missing(method_name [, *args [, &block]])
  code...
end

method_missingメソッドを定義すると、存在しないメソッドが呼ばれたときの動作を記述できます。メソッド名の文字列を使って動作を変えるような機能が作れます。

オブジェクトに対して存在しないメソッドを呼び出すと、Rubyはmethod_missingメソッドを呼び出します。引数method_nameには、メソッド名がシンボルで渡されます。引数*args&blockでメソッドに渡された引数とブロックを取り出せます。戻り値は存在しないメソッドの戻り値になります。

次の例では、Fixnumクラスにmethod_missingを定義して、「to_数字」というメソッドが呼ばれたときは、整数を「数字」進数の文字列に変換する機能を加えています。

method_missingの中でsuperを呼び出せば、祖先クラス(Objectクラス)のmethod_missingが呼ばれ、例外NoMethodErrorが発生します。

class Fixnum
  def method_missing(name)
    if name.to_s =~ /^to_(\d+)$/
      to_s($1.to_i)
    else
      super
    end
  end
end
 
puts 255.to_2
puts 255.to_16
11111111
ff

関連項目