本文介绍了红宝石中的TOPLEVEL_BINDING是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
它不等于主线程上的binding
,这个顶级作用域是什么?此作用域与主线程上的binding
有什么区别?
It doesn't equal the binding
at the main thread, what is this toplevel scope? What does this scope differ from the binding
at the main thread?
> ruby -e 'puts TOPLEVEL_BINDING === binding'
false
推荐答案
事实是,TOPLEVEL_BINDING
始终引用Binding
的预定义全局实例,而Kernel#binding
创建一个新的Binding
实例,该实例封装每次都具有当前执行上下文.在顶层,它们都包含相同的绑定,但是它们不是同一对象,因此您无法使用==
或===
测试它们的绑定相等性.
The fact is, TOPLEVEL_BINDING
always refers to a predefined global instance of Binding
, while Kernel#binding
creates a new instance of Binding
that encapsulates the current execution context every time. At top level, they both contain the same bindings, but they are not the same object and you cannot test their binding equality with ==
or ===
.
puts TOPLEVEL_BINDING
puts TOPLEVEL_BINDING
puts binding
puts binding
puts binding == binding
# =>
#<Binding:0x9769ea0>
#<Binding:0x9769ea0>
#<Binding:0x9941ea8>
#<Binding:0x9941e58>
false
这篇关于红宝石中的TOPLEVEL_BINDING是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!