我是一个Clojure的绝对新手。我安装了Clojure 1.6和Lein (我使用的是Ubuntu 15.04). 我该如何在终端中运行我创建的Clojure文件?是否有像clojure file.clj
这样的命令可以实现这个功能?非常感谢你的帮助!
简单回答:
如果'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的生活比仅使用-m
和load-file
更加轻松。 (Clojure真的更适合开发小型或大型项目,而不是运行一次性脚本。Clojure启动所需的时间太长,无法用作脚本语言,并且使用Leiningen需要更长时间。)
$ lein run -m my.namespace # run the -main function of a namespace
main.boot
的文件,其中包含:#!/usr/bin/env boot
(defn -main [& args]
(println "Hello world!")
(System/exit 0))
$> chmod a+x main.boot
$> ./main.boot
Hello world!
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,但我并不喜欢它。
Exception in thread "main" java.io.FileNotFoundException: <FILE>.clj (No such file or directory)
,可是我的文件已经打包在 jar 包里了。 - Snehaa Ganesanjava -cp <JAR> clojure.main -m <NAMESPACE> <ARG1> <ARG2>
- Snehaa Ganesan
java
而不是lein
来运行简单的Clojure程序的方法:https://stackoverflow.com/questions/30151387/cant-see-printed-values-if-launch-script-with-java/30167378#30167378 - user2524973