メタプログラミング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()を使う

2.2.3 Computerクラスのリファクタリング

  • 開始=>手順1=>2=>3がかなりきもちイイ!
  • define_methodの定義場所がRuby上級者って感じ