Class: Binding
Overview
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.
Instance Method Summary collapse
-
#clone ⇒ Object
:nodoc:.
-
#dup ⇒ Object
:nodoc:.
-
#eval(string[, filename [,lineno]]) ⇒ Object
Evaluates the Ruby expression(s) in string, in the binding's context.
Instance Method Details
#clone ⇒ Object
:nodoc:
305 306 307 308 309 310 311 |
# File 'proc.c', line 305
static VALUE
binding_clone(VALUE self)
{
VALUE bindval = binding_dup(self);
CLONESETUP(bindval, self);
return bindval;
}
|
#dup ⇒ Object
:nodoc:
291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'proc.c', line 291
static VALUE
binding_dup(VALUE self)
{
VALUE bindval = binding_alloc(rb_cBinding);
rb_binding_t *src, *dst;
GetBindingPtr(self, src);
GetBindingPtr(bindval, dst);
dst->env = src->env;
dst->path = src->path;
dst->first_lineno = src->first_lineno;
return bindval;
}
|
#eval(string[, filename [,lineno]]) ⇒ Object
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"
387 388 389 390 391 392 393 394 395 |
# File 'proc.c', line 387
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 */);
}
|