它不等于binding主线程,这个顶层范围是什么?这个范围与binding主线程有什么不同?
> ruby -e 'puts TOPLEVEL_BINDING === binding'
false
Run Code Online (Sandbox Code Playgroud)
事实是,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
Run Code Online (Sandbox Code Playgroud)