Различное поведение при запуске script против консоли IRB?
У меня есть простой фрагмент кода, который определяет метод (на Ruby Main Object), а затем проверяет, не определено ли оно.
puts "#{self} #{self.class}"
def foo;end
puts self.methods.include?(:foo)
Когда я запускаю это в консоли Ruby. Я получаю:
main Object
true
Если я вставляю этот код в файл .rb и запускаю такой файл ruby test_script.rb
, я получаю следующий вывод
main Object
false
Я не могу понять, почему я вижу это поведение. Метод определяется в script, так как я могу вызвать метод.
Я запускаю оба на Ruby 2.3.4
Ответы
Ответ 1
IRB привязывает методы в области верхнего уровня к main как общедоступные методы для удобства, но обычные программы Ruby привязывают методы, определенные в области верхнего уровня, к main как частные методы.
Вы можете найти здесь ссылку на основной контекст верхнего уровня Ruby.