手头的问题在于,当我运行我的程序时,lein run它会进入(read-line)部分并且我无法摆脱它,这意味着:read-line永远不会返回.
这是相关代码:
(def command (atom ""))
(defn print-prompt []
(print "prompt> ")
(flush)
)
(defn ask-for-input []
(print-prompt)
(let [x (str (read-line))]
(println (str "User input: " x))
(reset! command x)
)
)
Run Code Online (Sandbox Code Playgroud)
我从未在屏幕上看到"用户输入:"字符串.奇怪的是,如果我运行lein repl并调用(ask-for-input)它然后它正常工作:S
use*_*621 12
尝试lein trampoline运行,它的工作原理.
以下是leiningen FAQ:
问:我无法访问项目中的stdin.
答:这是JVM进程处理方法的限制; 他们都没有正确地暴露stdin.这意味着像read-line这样的函数在大多数情况下都不会按预期工作,尽管repl任务必然包含一个变通方法.您也可以使用trampoline任务在Leiningen退出后启动项目的JVM,而不是将其作为子进程启动.