如何运行Clojure文件?

时间:2015-05-25 20:27:48

标签: ubuntu clojure leiningen

我是clojure的绝对初学者。我有clojure1.6和lein(我使用ubuntu 15.04)。如何运行我使用终端创建的clojure文件?是否有像clojure file.clj这样的命令?感谢您的帮助!

5 个答案:

答案 0 :(得分:10)

简单的回答:

如果'clojure'是将运行Clojure的脚本或别名(通过使用适当的命令行参数运行java),并且“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文件以及如何设置源文件和命名空间(在你了解命名空间之后!),在与仅使用-mload-file相比,传统方式可以让您更轻松地使用Clojure。 (Clojure非常适合开发小型或大型项目,而不是运行一次性脚本.Clojure需要很长时间才能用作脚本语言,而Leiningen需要更长的时间。)

答案 1 :(得分:8)

来自Leiningen basic-usage

$ lein run -m my.namespace # run the -main function of a namespace

答案 2 :(得分:5)

您应该阅读Leiningen readmetutorial,或者按照您喜欢的编辑器的简单教程进行阅读。

答案 3 :(得分:3)

首先,Clojure程序员倾向于比运行独立文件更频繁地使用REPL。但是,如果您确实想要运行文件,我建议Boot快速破解。

Unix的安装说明在Github Boot project page上。安装Boot后,创建一个名为using System; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main() { SimulateTenButtonClicks(); Console.ReadKey(); } private static async void SimulateTenButtonClicks() { var foo = new Foo(); for (var i = 0; i < 10; i++) { var result = foo.DoStuff(i); Console.WriteLine(await result); } } public class Foo { public async Task<string> DoStuff(int i) { await Task.Delay(500); // simulate load return await Task.Run(() => { return String.Format("I have been hit {0} times", i); }); } } } } 的文件,其中包含:

main.boot

然后使其可执行并运行它:

#!/usr/bin/env boot

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

Here's a pretty good introduction to Boot

答案 4 :(得分:0)

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

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

如果最终需要将其他jar文件用于库等,则最终将变得不堪重负。那时,您可能需要研究靴子,Maven或Leiningen。大多数人似乎都在使用leiningen,但这会使我的头发着火。