Подтвердить что ты не робот

Как выйти из REPL

Я пытаюсь выйти из REPL.

Я использую (. System exit 0) или (System/exit 0), но это вызывает ошибку:

Exception in thread "Thread-3" java.lang.RuntimeException: java.lang.IndexOutOfBoundsException

Есть ли другой способ выйти из REPL? Как я могу решить эту ошибку?

4b9b3361

Ответ 1

Вы можете отправить символ "конец файла".

Вы можете просто нажать ctrl-d (* nix) или ctrl-z (Windows), чтобы выйти из REPL.

Ответ 2

Похоже, у вас другая проблема в вашем коде.

Способ выхода из repl: (System/exit 0)

Также работает альтернативный синтаксис (. System exit 0).

Вы можете протестировать это с чистой замены, начатой ​​с: java -cp clojure.jar clojure.main -r

Исключение, которое вы получите, похоже, указывает на ошибку в некотором индексированном поиске до того, как ваш код попадет в предполагаемую точку выхода, по-видимому, в другом потоке.

Ответ 3

Проблема с (System/exit 0) заключается в том, что она убивает всю JVM. Реальный вопрос заключается в том, как программно выйти из текущего repl и вернуться к любой функции, запустившей этот repl.

Вот удобный хак:

(clojure.main/repl
  ; Exit the repl whenever the user enters "exit" at the prompt.
  :read (fn [request-prompt request-exit]
          (let [form (clojure.main/repl-read request-prompt request-exit)]
            (if (= 'exit form) request-exit form))))

clojure.main/repl повторно вызывает читателя, по умолчанию перечитывая, чтобы получить одну форму за раз. Одним из аргументов читателю является специальный дозорный объект, который читатель должен возвращать, когда больше нет форм для чтения. По умолчанию считывающее устройство по умолчанию считывает возвращаемое значение только в EOF. В приглашении повторного чтения у вас нет доступа к объекту дозорного, поэтому вы не можете вернуть его, чтобы сообщить оценщику, что вы закончили ввод форм. Установив свой собственный читатель, вы можете проверить конкретную форму - например, выход символа - и вернуть объект-дозор, всякий раз, когда эта форма читается, тем самым указывая оценщику, что вы готовы выйти из repl, без фактического убийства всей ВМ.

Ответ 4

Сегодня у меня есть ответ, вот что мне нужно

(import ('java.lang.management ManagementFactory)
(use 'clojure.contrib.shell)
(defn process-pid [] (let [m-name (.getName (ManagementFactory/getRuntimeMXBean))] (first (.split m-name "@"))))

(defn exit (sh "kill" (process-pid))

Ответ 5

чтобы выйти из repl: Если вы используете реплика из командной строки, то (как упоминает Шон) ctrl-d
если вы используете его из слизи, тогда Alt-x slime-quit- lisp должен это сделать. если вы запускаете его из eclipse, тогда я не уверен, что есть чистый способ выйти из, используя небольшую красную кнопку.

Ответ 6

В Windows (тестируется в Windows 7 x64), используя стандартную командную оболочку (cmd.exe), символ ctrl-Z (за которым следует клавиша ввода) представляется индикатором конца файла, он опустил меня из REPL обратно в командную строку. Я подозреваю, что это также будет работать эквивалентно в Windows PowerShell, кто-то, кто знаком с ним, проверит и подтвердит...

Обратите внимание также, что это для запаса Clojure REPL - если вы используете оболочку Datomic (которая, как представляется, является экземпляром Java Beanshell), введите "quit();"...

НТН.

Ответ 7

Вы можете использовать следующую комбинацию клавиш для выхода из Cider REPL в emacs: C-c C-q

Ответ 8

Если вы установите "lein", тогда exit или quit:

$ lein repl
...
user=>exit
Bye for now!