Objects of class Binding
encapsulate the execution context at
some particular place in the code and retain this context for future use.
The variables, methods, value of self
, and possibly an
iterator block that can be accessed in this context are all retained. Binding objects can be created using
Kernel#binding
, and are made available to the callback of
Kernel#set_trace_func
.
These binding objects can be passed as the second argument of the
Kernel#eval
method, establishing an environment for the
evaluation.
class Demo
def initialize(n)
@secret = n
end
def get_binding
return binding()
end
end
k1 = Demo.new(99)
b1 = k1.get_binding
k2 = Demo.new(-3)
b2 = k2.get_binding
eval("@secret", b1) #=> 99
eval("@secret", b2) #=> -3
eval("@secret") #=> nil
Binding objects have no class-specific methods.
- E
Evaluates the Ruby expression(s) in string, in the binding's context. If the optional filename and lineno parameters are present, they will be used when reporting syntax errors.
def get_binding(param)
return binding
end
b = get_binding("hello")
b.eval("param") #=> "hello"
Source: show
static VALUE bind_eval(int argc, VALUE *argv, VALUE bindval) { VALUE args[4]; rb_scan_args(argc, argv, "12", &args[0], &args[2], &args[3]); args[1] = bindval; return rb_f_eval(argc+1, args, Qnil /* self will be searched in eval */); }