4
它不等于主线程中的binding
,这个顶级范围是什么?此范围与主线程中的binding
有什么不同?什么是ruby中的TOPLEVEL_BINDING?
> ruby -e 'puts TOPLEVEL_BINDING === binding'
false
它不等于主线程中的binding
,这个顶级范围是什么?此范围与主线程中的binding
有什么不同?什么是ruby中的TOPLEVEL_BINDING?
> ruby -e 'puts TOPLEVEL_BINDING === binding'
false
事实是,TOPLEVEL_BINDING
总是指Binding
预定义的全局实例,而Kernel#binding
创建一个封装当前执行上下文每一次的Binding
一个新的实例。在顶层,它们都包含相同的绑定,但它们不是同一个对象,您不能使用==
或===
来测试它们的绑定相等性。
puts TOPLEVEL_BINDING
puts TOPLEVEL_BINDING
puts binding
puts binding
puts binding == binding
# =>
#<Binding:0x9769ea0>
#<Binding:0x9769ea0>
#<Binding:0x9941ea8>
#<Binding:0x9941e58>
false