メタプログラミングRuby(火曜日・2.2)
さあ火曜日
「この重複コードを排除するには2つの方法が考えられる」と、ビルは自慢げに言う。
P74
今日もビルは絶好調みたいですね!次のページでは若いころの話とかしちゃってるし
2.2.1 メソッドを動的に呼び出す
- sendメソッドでメソッドを動的に呼び出すことができる。obj.send(:my_method, 3)
- Test::Unitでのテストメソッドの探索にも使われている
method_names = public_instance_methods(true) #自身のpublicメソッドを取得 tests method_names.delete_if {|method_name| method_name !~ /^test./} #testで始まるメソッドを収集
柔軟だなー
- 上記のような動的ディスパッチをパターンディスパッチと呼ぶ
- オブジェクトの中身をのぞくには他にもコンテキスト探査機を使うという方法がある
2.2.2 メソッドを動的に定義する
- Module#define_method()を使う