【问题标题】:How to run a Clojure File?如何运行 Clojure 文件?
【发布时间】:2015-05-25 20:27:48
【问题描述】:

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

【问题讨论】:

标签: ubuntu clojure leiningen


【解决方案1】:

简单的答案:

如果 '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 则需要更长的时间。)

【讨论】:

    【解决方案2】:

    来自Leiningen basic-usage

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

    【讨论】:

      【解决方案3】:

      您应该阅读Leiningen readmetutorial,并为您最喜欢的编辑器学习一些简单的教程。

      【讨论】:

        【解决方案4】:

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

        Unix 的安装说明位于Github Boot project page。安装 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!
        

        Here's a pretty good introduction to Boot

        【讨论】:

          【解决方案5】:
          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: &lt;FILE&gt;.clj (No such file or directory),我的文件被打包在 jar 中。
          • 感谢您的建议。但是,通过从类路径的根目录运行此命令,我能够成功使用单个文件(打包在 jar 中):java -cp &lt;JAR&gt; clojure.main -m &lt;NAMESPACE&gt; &lt;ARG1&gt; &lt;ARG2&gt;
          猜你喜欢
          • 2011-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-23
          相关资源
          最近更新 更多