我对绑定感到困惑。
def repl(input_stream, output_stream)
loop do
output_stream.print "> "
input = input_stream.gets()
result = binding.eval(input)
output_stream.puts(result)
end
end
repl($stdin, $stdout)
我打算用$ stdin和$ stdout调用repl。我需要一个愚蠢的版本:
binding.eval(input) is doing.
绑定只是我们目前在调用堆栈中的位置吗?他们持有当前的局部变量?还要别的吗?什么是与现有范围不同的好方法?
答案 0 :(得分:0)
Binding类的对象将执行上下文封装在代码中的某个特定位置,并保留此上下文以供将来使用。可以在此上下文中访问的变量,方法,self值以及可能的迭代器块都将被保留。可以使用Kernel#binding创建绑定对象,并使其可用于Kernel#set_trace_func的回调。
static VALUE
bind_local_variable_defined_p(VALUE bindval, VALUE sym)
{
ID lid = check_local_id(bindval, &sym);
const rb_binding_t *bind;
if (!lid) return Qfalse;
GetBindingPtr(bindval, bind);
return get_local_variable_ptr(bind->env, lid) ? Qtrue : Qfalse;
}
以下是公共实例方法的示例
def get_binding(param)
return binding
end
b = get_binding("hello")
b.eval("param") #=> "hello"