Rubyリファレンス: Home

instance_exec (Object)

Edit   History

Ruby 1.8.7 Ruby 1.9

標準クラス・モジュール > Object > instance_exec

obj.instance_exec(var, ...) {|v, ...| block }

instance_execメソッドは、渡されたブロックをレシーバのインスタンスの元で実行します。ブロックの戻り値がメソッドの戻り値になります。

ブロック内では、インスタンスメソッド内でコードを実行するときと同じことができます。ブロック内でのselfはレシーバのオブジェクトを指します。なお、ブロックの外側のローカル変数はブロック内でも使えます。

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

Ruby 1.9 Ruby 1.9では、instance_execメソッドはBasicObjectに移されました(この変更はRuby 1.8用に書いたプログラムに特に影響はありません)。

次の例では、instance_execメソッドに渡したブロック内でインスタンス変数やprivateメソッドを利用しています。メソッド引数3がブロック引数nに渡されます。

class Cat
  def initialize(name)
    @name = name
  end
  private
  def hello
    "meow..."
  end
end
 
cat = Cat.new("Piko")
puts cat.instance_exec(3) {|n| @name + ": " + hello * n }
Piko: meow...meow...meow...

関連項目