Это связано с тем, что команда irb (в любом случае в моей системе) запускает небольшой скрипт ruby, который выглядит следующим образом:
#!/usr/bin/env ruby
#
# irb.rb - interactive ruby
# $Release Version: 0.9.6 $
# $Revision: 40560 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
require "irb"
IRB.start(__FILE__)
Итак, TOPLEVEL_BINDING
- это сценарий, а не контекст IRB.
В поисках дополнительной информации я наткнулся на эту короткую статью , в которой говорится:
Это, как следует из названия, связывание вашего сценарияmain scope:
a = 42
p binding.local_variable_defined?(:a) # => true
p TOPLEVEL_BINDING.local_variable_defined?(:a) # => true
def example_method
p binding.local_variable_defined?(:a) # => false
p TOPLEVEL_BINDING.local_variable_defined?(:a) # => true
end
example_method
Подводя итог, можно сказать, что TOPLEVEL_BINDING
- это binding
для первого сценария в текущем контексте, который был запущен виртуальной машиной Ruby.При запуске IRB этот сценарий запускает сеанс IRB.