メタプログラミングRuby』を読みました。面白かったのでご紹介します。第1部だけ少し細かく書いてあります。から騒ぎ本のタイトルは『メタプログラミングRuby』ですが、メタプログラミングに限らずRubyでスムーズにプログラミングするために必要な知識がどっさり載っています。複数のクラスに同じクラスメソッドを定義するにはどういう方法があるか?クラスインスタンス変数とは何か?クラス変数との違いは?など、曖昧に覚えていることや使うたびに調べているようなことが、整理されて論理的に理解できるようになりました。Rubyのコードを論理的に読み解くには、オブジェクトモデルとスコープの理解が欠かせません。Rubyのオブジェクトモデルには"メタクラス"あるいは"特異クラス"と呼ばれる隠れたクラスが潜んでおり、重要な役割を果たしています。あるクラスAのインスタンスaを作り、その特異クラスにメソッドを定義すると特異メソッドになります。"foo"しかしaのクラスであるAにはfooメソッドがありませんし、Aのスーパークラスにも特異クラスは現れません。BasicObject]では特異クラスはどこにあるのでしょうか?次にスコープの例です。@@a答えは"受ける"です。上のコードの結果は2になります。インスタンス変数@aや、ローカル変数aだったらどうでしょうか?またそれはなぜでしょうか?以上のような質問に答えるために、それぞれの場合の答えを丸暗記する必要はありません。単純なスコープのルールを覚えておけば済みます。スコープを理解すると、class_evalやinstance_evalの使いどころや、クロージャの意味まで明確になります。『メタプログラミングRuby』にはそれらを理解するための例や解説が豊富に載っています。物語形式になっていて、リラックスして読み進めることができると思います。『メタプログラミングRuby』を読んだ一番の成果は、上述のオブジェクトモデルとスコープの理解が深まったことでした。これだけでプログラミングが楽になったと実感したほどです。lambdaの違いなど、オフトピックも面白かったことです。以上、購入を考えている方の参考になれば幸いです。