在LightTable中运行leiningen Clojure项目

4
我将会为您翻译这段内容:

我正在尝试使用Clojure运行我的Leiningen项目。虽然LightTable在连接面板中显示已连接,但除非我手动调用主函数,否则它不会执行。

project.clj:

(defproject lein-test "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]]
  :main lein-test.core)

core.clj:

(ns lein-test.core)

(defn -main [& args]
  (println "asdf"))

当我使用ctrl+shift+enter键评估整个文件时,我看到ns的值为nil,控制台中没有任何输出。如果我添加:
(-main)

然后控制台会显示'asdf'。在命令提示符中输入lein run可以得到预期的行为。我错过了什么?

1个回答

6

Control+Shift+Enter按键组合可以评估命名空间。

评估命名空间不应运行其中的任何函数,除非你在顶层调用它们。在给定的代码库中,理想情况下只应该有一个函数被称为顶层函数(通常是-main函数),并且应该通过配置而不是在命名空间代码中调用它来设置。

在这里一切都运作正常。您可以将对(-main)的调用放在注释块或文件的临时部分以方便开发,或直接从repl接口调用它。


好的。那么在Light Table中没有类似于'lein run'的东西吗?'lein test'呢? - Rob Lourens
Light Table不是我的主要编辑器,所以可能有一些信息我没有找到,但令人惊讶的是,除了作者指出插件是进行clojure.test集成的正确方式之外,我没有看到其他任何提示,也没有发现该插件的存在。一个解决方法是在repl中加载定义测试的所有命名空间,并手动运行(clojure.test/run-all-tests) - noisesmith
1
完美,这就是我需要的信息。谢谢。 - Rob Lourens
谢谢。在Mac上是cmd-shift-enter。 - kometen

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