如何运行Clojure文件?

11

我是一个Clojure的绝对新手。我安装了Clojure 1.6和Lein (我使用的是Ubuntu 15.04). 我该如何在终端中运行我创建的Clojure文件?是否有像clojure file.clj这样的命令可以实现这个功能?非常感谢你的帮助!


这可能也会有所帮助:以下是如何仅使用java而不是lein来运行简单的Clojure程序的方法:https://stackoverflow.com/questions/30151387/cant-see-printed-values-if-launch-script-with-java/30167378#30167378 - user2524973
5个回答

13

简单回答:

如果'clojure'是一个脚本或别名,将通过运行带有适当命令行参数的Java来运行Clojure,并且“foo.clj”是您的Clojure源文件的名称,则只需输入

clojure foo.clj
如果这不起作用,那么是因为你的路径中没有这样的脚本,但你可以创建一个脚本,其内容看起来像这样:
#!/bin/sh
java -cp /usr/lib/clojure-1.6.0.jar clojure.main "$@" -r

你需要找到Clojure jar文件的位置,并替换-cp后面的部分。使用Leiningen,您可能会在~/.m2下找到某个版本的此文件。

如果您启动了Clojure并获得了REPL提示符,则可以输入:

(load-file "foo.clj")
或者
(load-file "<path to foo.clj>/foo.clj")

好的答案:

请查看Shlomi和Daniel Compton的答案。

当你开始学习Clojure时,可能会有一点学习曲线,关于如何设置您的目录结构和文件名以便与Leiningen和Clojure轻松工作(如果您很熟悉Java,这会更容易一些)。然而,一旦您熟悉了Leiningen的project.clj文件以及如何设置源文件和名称空间(在了解名称空间之后!),按照惯例做事情将使您使用Clojure的生活比仅使用-mload-file更加轻松。 (Clojure真的更适合开发小型或大型项目,而不是运行一次性脚本。Clojure启动所需的时间太长,无法用作脚本语言,并且使用Leiningen需要更长时间。)


9

6

4
首先,Clojure程序员倾向于更频繁地使用REPL而不是运行独立的文件。但如果您确实想要运行文件,我建议使用Boot进行快速开发。
Unix的安装说明在Github Boot项目页面上。一旦您安装了Boot,请创建一个名为main.boot的文件,其中包含:
#!/usr/bin/env boot

(defn -main [& args]
  (println "Hello world!")
  (System/exit 0))

然后将其设为可执行文件并运行:
$> chmod a+x main.boot
$> ./main.boot
Hello world!

这里有一篇关于Boot的很好的介绍,与Clojure相关,在10分钟内开始。请点击此处查看。

0
java -cp clojure-1.7.0.jar clojure.main -i file.clj

假设已安装 Java,并且当前目录中同时有 clojure-1.7.0.jar 文件和 file.clj

如果你最终需要其他库的 jar 文件等,那么这可能会变得非常困难。这时你可能想要研究一下 boot、maven 或 leiningen。大多数人似乎使用 leiningen,但我并不喜欢它。


你的意思是说 file.clj 应该存在于 jar 包外面吗?我一直得到这个错误 Exception in thread "main" java.io.FileNotFoundException: <FILE>.clj (No such file or directory),可是我的文件已经打包在 jar 包里了。 - Snehaa Ganesan
谢谢您的建议。我用一个单独的文件(打包在jar中)成功了,通过从类路径的根目录运行此命令: java -cp <JAR> clojure.main -m <NAMESPACE> <ARG1> <ARG2> - Snehaa Ganesan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接