def interpret_with_binding(source, my_binding, *args)
      path = '(interpret)'
      if source.respond_to? :to_io
        path = source.path if source.respond_to? :path
        source = source.to_io.read
      end
      block = lambda { |*a| eval("lambda { #{source} }", my_binding, path).call(*a) }
      instance_exec(*args, &block)
    end
def interpret_with_binding(source, my_binding, *args)
      path = '(interpret)'
      if source.respond_to? :to_io
        path = source.path if source.respond_to? :path
        source = source.to_io.read
      end
      block = lambda { |*a| eval("lambda { #{source} }", my_binding, path).call(*a) }
      instance_exec(*args, &block)
    end
Interpret the string _source_ as a body of a block, while passing
 <i>*args</i> into the block and using _my_binding_ for evaluation.

 A small example:

  class A
    include DSLKit::Interpreter
    def c
      3
    end
    def foo
      b = 2
      interpret_with_binding('|a| a + b + c', binding, 1) # => 6
    end
  end
  A.new.foo # => 6

 See also #interpret.