我一直在學習Clojure,最近我一直在使用REPL作爲命令行計算器,如果可以將參數傳遞給Clojure REPL並獲得它,我的'工作流程'將大大改善輸出,有誰知道如何做到這一點?將表達式作爲參數傳遞給Clojure REPL
澄清:比如我想執行雷音 「(2 + 2)」,並使其返回4
~ lein "(+ 2 2)"
'(+ 2 2)' is not a task. See 'lein help'.
我一直在學習Clojure,最近我一直在使用REPL作爲命令行計算器,如果可以將參數傳遞給Clojure REPL並獲得它,我的'工作流程'將大大改善輸出,有誰知道如何做到這一點?將表達式作爲參數傳遞給Clojure REPL
澄清:比如我想執行雷音 「(2 + 2)」,並使其返回4
~ lein "(+ 2 2)"
'(+ 2 2)' is not a task. See 'lein help'.
grenchman創建一個repl,並且每個命令行調用從該repl獲得一個結果,這可能是您想要的。
任何你def
可在REPL。
=> (def ten 10)
...
=> (defn fact [n] (apply * (range 1 (inc n))))
...
=> (fact ten)
3628800
=>
這是REPL是如何工作的 - 你寫一些表達,並按Enter
,得到了表達結果返回。
→ lein repl
nREPL server started on port 59650 on host 127.0.0.1
REPL-y 0.3.0
Clojure 1.5.1
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Exit: Control+D or (exit) or (quit)
Results: Stored in vars *1, *2, *3, an exception in *e
user=> (+ 42 42)
84
user=>
lein
(Leiningen)是錯誤的工具,除了啓動REPL。如果你真的想要一個Clojure程序的命令行界面,那也是可能的,但是需要你將它編譯成一個jar並執行它,參見cf. this article on building CLI clojure apps。
# as bash variable
{ echo "$clj-expressions"; cat - ; } | lein repl
# as file
{ cat ./script.clj; cat - ; } | lein repl
我們是幸運的,lein repl
只是一個純老的UNIX進程
這裏的想法是你的命令發送到REPL的標準輸入,但確保當前終端的標準輸入是繼連接。
感謝喬納森·勒弗勒爲這一個。 His answer here解決了這個問題。
爲了收集輸出,您總是可以將spit作爲您運行的腳本的一部分。
謝謝,這正是我正在尋找的。 – xanth