2010-11-01から1ヶ月間の記事一覧
危険なメタプログラミングを防ぐ話題は続きのほうにありました。今日は9.2 「モンキーパッチを防ぐ」からです オープンクラスを無制限に使うのでなく、モジュールを作って include する → ancestors に出る 動的メソッドを定義する時は先に同名のメソッドが…
ActionController のテストは一見普通のテストだけどその裏には……というところで終わったのでした。続き テスト テストにもメタプログラミングを駆使する そりゃそうだろうと思ってました テストする元のクラスを再オープンしていますが、こういうのでテスト…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る第9章ではメタプログラミングの落とし穴を避け…
今日は ActiveRecord の動的ファインダのところです。 ActiveRecord::Base.find は find_by_ のように属性名を含むメソッドでの検索もできる and, or での連結などもできる 「ゴーストメソッド」で実装 長い ここでもやはり最初に method_missing でメソッド…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る第8章では ActiveRecord の動的属性と動的ファ…
今日は ActiveRecord::Base で使われているメタプログラミングの実際について。 autoload で require を遅延 Validations の included でサブモジュールを追加 include させる クラス拡張ミックスインで ActiveRecord::Base の特異クラスに Validations など…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第2部「Rails におけるメタプログラミ…
第5章 後半、フックメソッドのところからです。 フックメソッドとは inherited, included, method_added など何かイベントがあった時にインタプリタから自動的に呼ばれるメソッドのこと Merb の例 - included を使って Merb::Cache::CacheMixin が include …
第5章、eval を使った実践編。 まずはクラスマクロ attr_checked ではなくカーネルメソッドとして add_checked_attr(klass, meth) のようなメソッドを定義(手順1) eval でべったりとクラスを開いてメソッド定義。これはかなりの力技 すぐに eval を使わずに …
第5章前半、eval の説明がまだ続きます。 「???_eval にブロックを渡すのと文字列を渡すのは同じことだ」 - いつパース、コンパイルされるかは異なりますけどね それにブロックにするか文字列にするかで定数探索が異なる時期があったような……。今の 1.9 だと…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第5章です。「コードを記述するコード…
第4章の最後です。 クイズ: モジュールを include してクラスメソッドを定義しようとしてもできない クラスの特異クラスに include する それ extend でできるよ alias でオリジナルのメソッドを退避してラッパを書く手法。アラウンドエイリアスと呼ぶらしい…
第4章の特異メソッドのところからです。 クラスメソッドは実は特異メソッドだったんだよ。な、なんだってー>ΩΩΩ とかやって欲しかった attr_reader とか attr_writer のようなメソッドをクラスマクロと言うらしい 「特異クラスはRuby界の UFO だ。実際に目…
クラスのインスタンス変数とクラス変数 クラスもオブジェクトなので当然インスタンス変数を持てる クラス変数は継承で共有される クラス変数じゃなくてクラスのインスタンス変数を使うのがいまどきのメインストリームらしい クラスのインスタンス変数に利用…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第4章です。ここには特異クラスの説明…