2014-06-05 80 views
1

我一直在學習Clojure,最近我一直在使用REPL作爲命令行計算器,如果可以將參數傳遞給Clojure REPL並獲得它,我的'工作流程'將大大改善輸出,有誰知道如何做到這一點?將表達式作爲參數傳遞給Clojure REPL

澄清:比如我想執行雷音 「(2 + 2)」,並使其返回4

~  lein "(+ 2 2)" 
'(+ 2 2)' is not a task. See 'lein help'. 

回答

1

grenchman創建一個repl,並且每個命令行調用從該repl獲得一個結果,這可能是您想要的。

+0

謝謝,這正是我正在尋找的。 – xanth

0

任何你def可在REPL。

=> (def ten 10) 
... 
=> (defn fact [n] (apply * (range 1 (inc n)))) 
... 
=> (fact ten) 
3628800 
=> 
0

這是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=> 
+0

我在帖子中加了一些說明。我想要做的是通過「(+ 21 21)」太過lein,並返回42. – xanth

+0

請參閱http://charsequence.blogspot.com/2012/04/scripting-clojure-with-leiningen-2.html – edbond

2

lein(Leiningen)是錯誤的工具,除了啓動REPL。如果你真的想要一個Clojure程序的命令行界面,那也是可能的,但是需要你將它編譯成一個jar並執行它,參見cf. this article on building CLI clojure apps

0
# 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作爲您運行的腳本的一部分。

相關問題