Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Moduleクラス > class_eval
module_eval(expr, fname = "(eval)", lineno = 1) -> objectmodule_eval {|mod| ... } -> objectclass_eval(expr, fname = "(eval)", lineno = 1) -> objectclass_eval {|mod| ... } -> objectモジュールのコンテキストで文字列 expr またはモジュール自身をブロックパラメータとするブロックを 評価してその結果を返します。
モジュールのコンテキストで評価するとは、実行中そのモジュールが self になるということです。 つまり、そのモジュールの定義式の中にあるかのように実行されます。
ただし、ローカル変数だけは module_eval/class_eval の外側のスコープと共有します。 定数とクラス変数のスコープは、自身のモジュール定義式内と同じスコープになります。
例:
class C
end
a = 1
C.class_eval %Q{
def m # メソッドを動的に定義できる。
return :m, #{a}
end
}
p C.new.m #=> [:m, 1]
[SEE_ALSO] Object#instance_eval, Module.new