6

它不等于binding主线程,这个顶级范围是什么?这个范围与binding主线程有什么不同?

> ruby -e 'puts TOPLEVEL_BINDING === binding'
false
4

1 回答 1

10

事实是,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
于 2013-06-18T13:53:52.727 回答