Я столкнулся с этой проблемой сегодня, изучая урок г-на Соседства по Ruby, и выработал ответ.Это известная проблема с SciTE и способ взаимодействия с stdin (gets()
) в Windows.
Чтобы запустить учебный код как есть, используйте командную строку для запуска вашей программы, а не SciTEКлавиша «Вперед» [F5] упоминается в «Маленькой рубиновой книге» мистера Соседства:
Обходной путь 1:
- В вашей установке Windows Ruby должен быть ярлык (в разделе «Пуск»).меню) называется «Запустить командную строку с Ruby».Запустите его.
- В командной строке Ruby перейдите к пути, в котором находится ваш файл Hello World Ruby.
- Введите
ruby hello.rb
и нажмите [Enter].(Замените hello.rb
на имя вашего файла.)
Обходной путь 2:
Другой альтернативой является игнорирование неработающей командной строки и использование внутренней SciTE.Но для этого необходимо добавить $stdout.flush()
после каждого оператора puts()
, например:
puts "Hello, world. What is your name?"
$stdout.flush() # Add this line!
myname = gets()
puts "Well, hello there " + myname + "."
$stdout.flush() # Add this line!
Примечание
Следующее несоответствие в главе 0 руководства, которое вы, вероятно, вероятнонемедленно обратите внимание, что символ новой строки (\ n) включен в переменную myname
(входные данные из gets()
).Вероятно, вы увидите следующий вывод (обратите внимание на «.» Во второй строке):
Well, hello there Yournamehere
.
Чтобы исправить это, измените myname.gets()
на myname.gets().chomp()
.(Не стесняйтесь искать chomp () в онлайн-документации по Ruby.)