概要
method_missingでゴーストメソッドを定義
詳細
Rubyではメソッドが見つからなかった場合にmethod_missingが呼び出されます。
その際の動作をオーバーライドしておくことで、本来存在しないメソッド=ゴーストメソッドを
呼び出すことができます。
サンプルコード
「hxge」というメソッド名でメソッド名称を標準出力する仕様で作成したい場合。
通常のメソッド定義との比較用に「hoge」のみ定義してあります。
xは任意の1文字。
# encoding: Windows-31J require "pp" class Hoge def hoge() puts "hoge" end def method_missing(method, *args) if method.to_s.match(/h.ge/) puts "#{method}" else super.method_missing end end end hoge = Hoge.new begin hoge.hage hoge.hige hoge.hoge hoge.bar rescue => e puts e end
出力
hage hige hoge undefined method `bar' for #<Hoge:0x29f46a8>