@kyanny's blog

商品にならぬ技術は役に立たない - トーマス・エジソン

第二章 火曜日 メソッド

  • 動的ディスパッチ
    • send
class Dog
  def bark
    "bow wow!"
  end
end

Dog.new.send(:bark)
#=> "bow wow!"
  • パターンディスパッチ
    • instance_methods.grep /pattern/
class Dog
  def bark
    "bow wow!"
  end
end

method = Dog.instance_methods.grep(/bark/).first
Dog.new.send(method)
#=> "bow wow!"
  • 動的メソッド
    • define_method
class Dog
  define_method :bark do
    "bow wow!"
  end
end

Dog.new.bark
#=> "bow wow!"
  • method_missing
    • ゴーストメソッド
      • レシーバが知らないメソッド呼び出しが method_missing で処理された (respond_to? は false)
    • 動的プロキシ
      • method_missing で元の呼び出しを一部変更して別のオブジェクトを呼びなおす
    • respond_to? が true になるようにするにはオーバーライドする
    • ブランクスレート

メタプログラミングRuby

メタプログラミングRuby