metaprogramming/instance_exec/instance_exec.rb

tests/_examples/metaprogramming/instance_exec/instance_exec.rb in the metorex repository.

# instance_exec example
class Box
  def initialize(val)
    @value = val
  end

  def value
    @value
  end

  def transform(&blk)
    instance_exec(&blk)
  end

  def doubled
    instance_exec do
      @value * 2
    end
  end
end

b = Box.new 5
puts b.doubled

b2 = Box.new 10
puts b2.doubled

puts b.transform { @value + 100 }

Output:

10
20
105