我一直在学习Clojure,最近我一直在使用REPL作为命令行计算器,我的工作流程'如果可以将参数传递给Clojure REPL并获得输出,那会有很大的改进吗,有人知道怎么做吗?
澄清:例如我想执行lein"(+ 2 2)"让它返回4
~ lein "(+ 2 2)"
'(+ 2 2)' is not a task. See 'lein help'.
答案 0 :(得分:2)
lein
(Leiningen)是错误的工具。如果你真的想要一个Clojure程序的命令行界面,那也是可能的,但是需要你把它编译成jar并执行它,参见this article on building CLI clojure apps
答案 1 :(得分:1)
grenchman创建一个repl,每个命令行调用都从该repl获得一个结果,这可能是你想要的。
答案 2 :(得分:0)
REPL提供def
的任何内容。
=> (def ten 10)
...
=> (defn fact [n] (apply * (range 1 (inc n))))
...
=> (fact ten)
3628800
=>
答案 3 :(得分: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=>
答案 4 :(得分:0)
# as bash variable
{ echo "$clj-expressions"; cat - ; } | lein repl
# as file
{ cat ./script.clj; cat - ; } | lein repl
幸运的是,lein repl
只是一个普通的unix过程
这里的想法是将命令发送到repl的stdin,但确保之后连接当前终端的stdin。
感谢Jonathan Leffler的这一次。 His answer here解决了这个问题。
要收集输出,您可以随时spit将某些内容作为您运行的脚本的一部分。