实例评估

instance_eval 方法适用于所有对象。它在接收器的上下文中评估代码:

object = Object.new

object.instance_eval do
  @variable = :value
end

object.instance_variable_get :@variable  # => :value

instance_eval 在代码块的持续时间内将 self 设置为 object

object.instance_eval { self == object }  # => true

接收器也作为唯一参数传递给块:

object.instance_eval { |argument| argument == object }  # => true

instance_exec 方法的不同在此方面:它通过它的参数块来代替。

object.instance_exec :@variable do |name|
  instance_variable_get name  # => :value
end