IRB аналог python -i

Я хочу использовать IRB для запуска сценария, а затем дать мне интерактивную подсказку. Я делаю это с python -i xy.py в Python, однако irb xy.rb завершает работу после выполнения.

> python --help

-i    When a script is passed as first argument or the -c option is
      used, enter interactive mode after executing the script or the
      command

person Colonel Panic    schedule 22.01.2011    source источник


Ответы (1)


irb -r xy.rb

Для этого просто требуется упомянутый файл, прежде чем вы получите обычную подсказку IRB.

person Ashley Williams    schedule 22.01.2011
comment
Однако имейте в виду, что использование -r или require не даст вам доступа к локальным переменным скрипта, даже если они определены в среде выполнения верхнего уровня. - person Kelvin; 29.01.2013
comment
@hso Это из-за правил области видимости ruby. Когда вы require или load выполняете файл в ruby, локальные переменные на верхнем уровне этого файла не выходят за пределы (т. е. недоступны) этого скрипта. Это относится не только к irb, но и к случаям, когда один сценарий require соответствует другому. Вы можете использовать eval, чтобы обойти это, но тогда вам придется возиться с привязками... - person Kelvin; 02.07.2014
comment
Кстати, начиная с ruby ​​1.9, вам нужно добавить путь к нужному файлу: irb -r ./xy.rb - person Kelvin; 02.07.2014
comment
@hso, если вам нужен доступ к локальным файлам внешнего скрипта, вам следует изучить возможность использования отладчика. См. связанный вопрос. - person Kelvin; 02.07.2014
comment
Спасибо, @Кельвин. Я никогда серьезно не использовал Ruby. Я привык к тому, как работает импорт Python, и пытаюсь понять это. - person hso; 02.07.2014
comment
@hso Даже с python переменные в импортированном файле не загрязняют текущее пространство имен, если вы не попросите об этом через from lib import X. Если вы сделаете простой import lib, вы все равно сможете получить доступ к переменным через lib.some_variable. Руби не позволяет этого; он вводит только глобальные переменные (с префиксом $), переменные класса (с префиксом @@), переменные экземпляра (с префиксом @), константы (включая классы и модули) и методы. Но они всегда загружаются на верхнем уровне, а не в пространстве имен содержащего их файла. - person Kelvin; 02.07.2014