Rubyリファレンス: Home

class_exec, module_exec (Module)

Edit   History

Ruby 1.8.7 Ruby 1.9

標準クラス・モジュール > Module > class_exec, module_exec

obj.class_exec(var, ...) {|v, ...| block }
obj.module_exec(var, ...) {|v, ...| block }

class_execメソッドは、ブロックをクラス定義やモジュール定義の中のコードであるように実行します。ブロックの戻り値がメソッドの戻り値になります。

module_execメソッドはclass_execの別名です。Classオブジェクトに対してmodule_execを呼び出せますし、Moduleオブジェクトに対してclass_execを呼び出せます。

class_eval, module_evalとの違いは、class_execに引数を渡すと、その引数がブロック引数になることです。また、class_execには文字列でコードは渡せません。

ブロック内でのselfClassオブジェクトやModuleオブジェクトを指します。ブロックの外側のローカル変数はブロック内でも使えます。

次の例では、class_execメソッドに渡したブロック内で、attr_accessorを使って属性を作成しています。メソッド引数10がブロック引数numに渡されます。

class Product
end
 
Product.class_exec(10) do |num|
  1.upto(num) {|i| attr_accessor :"var#{i}" }
end
 
product = Product.new
product.var4 = "Cool"
puts product.var4
Cool

関連項目