The [instance_eval](<http://ruby-doc.org/core/BasicObject.html#method-i-instance_eval>) method is available on all objects. It evaluates code in the context of the receiver:

object = Object.new

object.instance_eval do
  @variable = :value
end

object.instance_variable_get :@variable  # => :value

instance_eval sets self to object for the duration of the code block:

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

The receiver is also passed to the block as its only argument:

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

The [instance_exec](<http://ruby-doc.org/core/BasicObject.html#method-i-instance_exec>) method differs in this regard: it passes its arguments to the block instead.

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