将Expression作为参数传递给Clojure REPL

时间:2014-06-05 09:05:04

标签: command-line clojure

我一直在学习Clojure,最近我一直在使用REPL作为命令行计算器,我的工作流程'如果可以将参数传递给Clojure REPL并获得输出,那会有很大的改进吗,有人知道怎么做吗?

澄清:例如我想执行lein"(+ 2 2)"让它返回4

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

5 个答案:

答案 0 :(得分:2)

除了启动REPL之外,

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将某些内容作为您运行的脚本的一部分。