#scala #read-eval-print-loop
#scala #чтение-оценка-печать-цикл
Вопрос:
Могу ли я остановить выполнение бесконечного цикла в Scala REPL? Введите это и попытайтесь остановить его, не выходя из REPL.
while(true){}
Я думал, что сработает что-то вроде Ctrl-C.
Комментарии:
1. Ctrl-C работает для меня в Mac OS X.
2. Ctrl-C и Ctrl-Break не работают в Windows 7
3. Какую версию Scala вы используете? В 2.9 были внесены некоторые улучшения, так что это будет работать без выхода из REPL. Ctrl-C должен работать, также в Windows. редактировать — только что опробовал это на Scala 2.9.0.1 в Windows Vista, и действительно, Ctrl-C не работает…
4. В настоящее время CTRL-C не работает в Windows. Смотрите мой отредактированный ответ ниже. Но я думаю, это должно сработать, если удалить привязку. Я спросил в списке рассылки scala (см. groups.google.com/forum /#!topic/scala-language/KfHp0JXdOI0 ). Давайте посмотрим, что происходит.
Ответ №1:
Это зависит от вашей версии scala. Если вы уже используете scala 2.9, это сработает, просто используя CTRL-C. Может потребоваться некоторое время, пока команда не достигнет REPL, но в какой-то момент это прервет ваш бесконечный цикл.
Если вы используете более старую версию scala (до 2.9). Нет способа остановить выполнение. В этих версиях CTRL-C приведет к завершению всего scala REPL.
Изменение было внесено в Scala 2.9.0.RC2. Смотрите Список изменений (часть: Улучшения Repl) для получения дополнительной информации.
Это не работает в Windows, поскольку привязки клавиш Scala REPL в дистрибутиве scala Windows переопределяют CTRL-C с помощью «переключения режима overtype». Тип
scala> :keybindings
в системе Windows, чтобы просмотреть весь комментарий для этой привязки. Я предполагаю, что это ошибка в Windows.
Комментарии:
1. У меня это также не работает в интерпретаторе Scala 2.11.8 (работающем на терминале Mac OS X). Я попытался
Stream.from(1) foreach println
и нажал Ctrl-C. Это прерывает весь процесс.2. Смотрите groups.google.com/forum /#!topic/scala-internals/PqK6GkZhJK0 в котором, кажется, говорится, что эта возможность была удалена (?!) незадолго до 2.10. И AFAICT это все еще не исправлено: issues.scala-lang.org/browse/SI-6302 Тьфу.