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