Задать вопрос
  • Почему в Sublime Text 3 не работает метод gets?

    @ToshiDono Автор вопроса
    По умолчанию в Sublime Text нет терминала, поэтому когда вы запускаете билд, он выполняет весь скрипт и просто выводит результат всего выполнения в окно билда. Интерактивный ввод данных оттуда не поддерживается.

    Однако есть SublimeREPL - плагин для Sublime Text, который добавляет возможность выполнения кода не покидая редактора. Ставится как и любой другой Sublime Text плагин (не забудьте перезапустить ST после установки плагина):
    Ctrl + Shift + P ⇒ Install Package ⇒ SublimeREPL
    Плагин должен подхватить и использовать текущую активную версию ruby, с учетом rvm и rbenv. Для ruby требуется установленный гем pry (с последним pry могуть быть проблемы, в этом случае советуют ставить версию pry 0.9.12.6):

    $ gem install pry
    # или
    $ gem install pry -v 0.9.12.6

    REPL запускается через меню команд ST, откроется в новой вкладке:
    Ctrl + Shift + P ⇒ SublimeREPL: Ruby
    После того, как REPL запущен, с ним можно работать как с irb в терминале, а также передавать на выполнение файлы, строки, выделенные фрагменты кода (см. клавиатурные сокращения)

    Есть проблема, которая касается конкретно gets - изначально это метод Kernel#gets, который будет работать по-разному, в зависимости от того, переданы аргументы (ARGV) скрипту или нет. Чтобы читать из стрима терминала, рекоммендуется указывать это явно:

    name = STDIN.gets.chomp
    # или
    name = $stdin.gets.chomp
    Ответ написан
    Комментировать