@ToshiDono

Почему в Sublime Text 3 не работает метод gets?

В irb метод gets работает, но в Sublime Text 3 нет никакой реакции. chomp же вообще не определен.
Вот пример кода:
name = gets.chomp
print name

Если убрать chomp, то в консоли снизу ошибка возникать не будет, но и возможности ввода данных так же не появится.
В общем как вводить данные в Ruby, используя Sublime Text 3?
Может нужно подключать какую-то библиотеку или еще что-нибудь?
  • Вопрос задан
  • 719 просмотров
Пригласить эксперта
Ответы на вопрос 1
@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
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы