Могу ли я остановить выполнение бесконечного цикла в Scala REPL?

#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 Тьфу.