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 getBinding return binding() end end k1 = Demo.new(99) b1 = k1.getBinding k2 = Demo.new(-3) b2 = k2.getBinding eval("@secret", b1) #=> 99 eval("@secret", b2) #=> -3 eval("@secret") #=> nil
Binding objects have no class-specific methods.
MISSING: documentation
static VALUE proc_clone(self) VALUE self; { struct BLOCK *orig, *data; VALUE bind; Data_Get_Struct(self, struct BLOCK, orig); bind = Data_Make_Struct(rb_obj_class(self),struct BLOCK,blk_mark,blk_free,data); CLONESETUP(bind, self); blk_dup(data, orig); return bind; }
static VALUE proc_dup(self) VALUE self; { struct BLOCK *orig, *data; VALUE bind; int safe = proc_get_safe_level(self); Data_Get_Struct(self, struct BLOCK, orig); bind = Data_Make_Struct(rb_obj_class(self),struct BLOCK,blk_mark,blk_free,data); blk_dup(data, orig); if (safe > PROC_TMAX) safe = PROC_TMAX; FL_SET(bind, (safe << PROC_TSHIFT) & PROC_TMASK); return bind; }