Tbpgr Blog

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

Ruby | method_missingでゴーストメソッドを定義

概要

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>