メタプログラミングRuby 第3章 水曜日:ブロック その4

ブロックの章の実用編ということで RedFlag という営業部門向けの DSL を作るところです。

  • 最初のバージョン適当すぎる。でもまあちゃんと動く
  • 「月間売上が驚くほど高い」
  • 「こんな感じの DSL になるといいのだけど」最初にそれを見せてください上司さん
  • setup のブロックを先に実行してから event のブロックを処理するために、ブロック(Proc オブジェクトにしたもの)を保存しておいて後でまとめて実行する遅延評価を用いる
  • さらにトップレベルのインスタンス変数を避けるために lambda で共有スコープを用いる。なるほど。共有スコープはこうやって無名のスコープを導入するために使えるんですね。1.9 限定ですが。
    • しかもこの lambda をさらにメソッドで包めばメソッドを呼ぶたびに、そこで再定義される Kernel のメソッドは毎回新しいスコープで実行されるので環境がリセットできるわけですね。

実例をみてみるのはやはり為になりました。DSL の書き方のベストプラクティスはもうちょっといろいろ読んでみたいですね。しかし第3章はこれで終わりです。来週からは第4章のクラス定義へ入っていきます。