en ja en en ja ja ja en ja en ja en ja en ja en
instance method BasicObject#method_missing (Ruby 2.2.0)
呼び出しに失敗したメソッドの名前 (Symbol) が name にその時の引数が第二引数以降に渡されます。
デフォルトではこのメソッドは例外 NoMethodError を発生させます。
[PARAM] name:
未定義メソッドの名前(シンボル)です。
[PARAM] args:
未定義メソッドに渡された引数です。
ユーザー定義の method_missing メソッドの返り値が未定義メソッドの返り値であるかのように見えます。
例 class Foo def initialize(data) @data = data end def method_missing(name, lang) if name.to_s =~ /\Afind_(\d+)_in\z/ if @data[lang] p @data[lang][$1.to_i] else raise "#{lang} unknown" end else super end end end dic = Foo.new({:English => %w(zero one two), :Esperanto => %w(nulo unu du)}) dic.find_2_in :Esperanto #=> "du"
[注意] このメソッドを override する場合は対象のメソッド名に対して Object#respond_to? が真を返すようにしてください。そのためには、Object#respond_to_missing? も同様に override する必要があります。
[SEE_ALSO] Object#respond_to?, Object#respond_to_missing?