method_missing

railsのARとかでこんな感じのコードを開くことがある.

class Entry < ActiveRecord::Base
end

entry = Entry.new
entry.name = "name"
entry.bio = "bio"
entry.save

ここで疑問なのがnameとbioメソッド.どこで定義されているか検討もつかない.調べた結果.Objectのmethod_missingというのを使っているらしい.
class Object
ということで実験.こんな感じのクラスを書く.

class Test
  def method_missing(name, *args)
    puts "#{name},#{args}"
  end
end

irbから実行

t = Test.new
t.hoge(12) #name=>hoge,args=>[12]
t.huga #name=>hoge,args=>[]
t.foo("str1", "str2") #name=>foo,args=>["str1", "str2"]