【发布时间】:2014-04-28 05:03:06
【问题描述】:
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
【问题讨论】:
-
似乎新上下文被 aury 作者视为每次调用
binding方法。可能只是为了简化对新上下文的分析,正是为了避免这种分析。 -
对不起,那是红宝石* =)
标签: ruby local-variables