RDoc解释说
类
Binding
的对象将执行上下文封装在代码中的某个特定位置,并保留此上下文以供将来使用。可以在此上下文中访问的self
的变量,方法,值以及可能的迭代器块都将被保留。
为此目的,如果单个上下文具有唯一的绑定对象,那么它似乎是合理且有用的。但是,即使在完全相同的上下文中,每次连续创建绑定对象都会导致不同的对象:
binding # => #<Binding:0x007f29017cf8e0>
binding # => #<Binding:0x007f29017ccff0>
binding # => #<Binding:0x007f29017c8d38>
这是为什么?有什么比这个功能更方便吗?
我看到这个功能的一个不便之处在于,当我做一些依赖于当前上下文的事情时,除了明确引用绑定对象之外别无他法。
下面的最后两行返回错误,因为binding
创建的绑定对象不是由创建的另一个绑定对象或隐式上下文共享。
b = binding
b.local_variable_set(:foo, "foo")
b.local_variable_get(:foo) # => "foo"
binding.local_variable_get(:foo) # => error
foo # => error
答案 0 :(得分:0)
请参阅Kernel#binding:
返回一个Binding对象,描述调用点的变量和方法。
据我了解,Binding对象与您创建它的位置有关。因此binding
可能无法检查上下文是否不同,只返回该点的新绑定。如果您想要更深层次的东西,您可以查看MRI工具source/mri/proc.c#314