class Foo def self.createMethod name define_method name do puts name.to_s end end def self.createMethod2 name define_method name do |text| puts name.to_s + text end end createMethod :yes createMethod :no createMethod2 :this end foo = Foo.new foo.yes #=> "yes" foo.send :no #=> "no" foo.this " is a pen." #=> "this is a pen." foo.send this, " is a pen." #=> "this is a pen."
Module#define_methodは動的にメソッドを定義することのできるメソッドです。今回はFooクラス内にyes、no、thisというメソッドを動的に生成しています。
Object#sendはメソッド名を指定してそのメソッドを呼び出すことができます。
動的言語ならではの動作ですね。ちなみにsendメソッドの定義が変更されている可能性がある場合のためにObject#__send__というメソッドもあるようです。
リファクタリングのときに重複を除去するなどに重宝するようですね。