本を読む

読書やコンピュータなどに関するメモ

「メタプログラミングRuby」

メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス
売り上げランキング: 1366

 実は最初、「method_missingとかdefine_methodとかinstance_evalとかが紹介されてるだけの本じゃない?」とかナメてました。すいません。

 概要としては、メソッド探索メカニズムとかオープンクラスとかを含めた、広い意味での「Rubyでのメタプログラミング」を紹介している本。が、本書が面白いのは、むしろそれらを使うイディオムとか使いどころを紹介してる点だと感じた。

 しかも会話形式にすることで、実例とか途中の課題とか失敗例とかを折りまぜて解説することに成功していると思う。これ、失敗すると単なる「入り込めないシナリオ」になるのだけど。

 Ruby勉強中の自分にとって、へぇだったのは以下のあたり。

  • incluceしたモジュールのメソッドは、インクルードするクラスの真上に入る
  • Ruby 1.9では、ブランクスレートとしてBasicObjectが使える(emasaka注:ブランクすぎる気はするけど)
  • define_methodのブロック引数はクロージャなので、フラットスコープに使える
  • ブロック、Proc、lambda、メソッドの違い
  • 多くのRubyistはクラス変数を使わずにクラスインスタンス変数を使っている(emasaka注:本当?)
  • オブジェクトの特異クラスのスーパークラスは、オブジェクトのクラス

 ちなみに、以前からActiveRecordがなんでdefine_methodじゃなくて文字列のevalでメソッドを定義してるんだろうと思ってたら、本書もこれに言及していた(p.244)。

define_method()は、いくつかのRuby処理系では、defよりも遅いことがわかっている(そうでないものもある)。これが、Railsの作者がアクセサの定義にコード文字列を選択した理由の1つである。

 なるほど。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/799-ca70b2a3

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad