maeshimaの日記

メモ書きです

メタプログラミングRuby 1章

あるメソッドが定義されているかどうか調べる

hoge.methods.grep /re/

のように、Enumerable#grep を使うと正規表現で調べられるので便利

オープンクラス

標準クラスにメソッド追加すると、既存のメソッドとかち合う危険性があるので、基本的にはよっぽどのことがない限り標準クラスはいじらない方向でやっている。でもユニットテストをちゃんと定義しておけばなんとか回避できる気がしてきた。

定数

モジュールがディレクトリで定数はファイル。わかりやすい考え方

モジュール

モジュールをインクルードするとき、Rubyは無名クラスを作ってモジュールをラップし、継承チェーンに挿入する。なので、Module#ancestors の結果にモジュールが含まれるようになる。

モジュール関連のメソッド

Module#ancestors
継承チェーンを取得する
Module#constants
現在のスコープの定数を全て返す
Module.constants
トップレベルにある全ての定数を返す
Module.nesting
現在のパス(モジュール階層)を返す