我想创建可以通过main
方法和脚本运行的Clojure类。在这两种情况下我都不需要命令行参数。目前,我有这样的事情:
(ns my-namespace.core
(:gen-class))
(defn -main
[& args]
(println "Hi"))
; I'd like to have something like (when (in-script?) (-main))
(-main)
在这种形式下,它可以作为脚本运行,但作为一个类运行它会两次显示Hi
,这并不奇怪。
我希望找到一些方法来区分类似于Python的成语if __name__ == "__main__":
。但我只发现旧discussion提到这一点。不幸的是,那里描述的*command-line-args*
方法似乎没有用。无论是作为类还是作为脚本运行,我都有nil
。
那么有没有办法在运行时找出Clojure文件是作为脚本运行还是通过main
方法运行?
答案 0 :(得分:2)
我建议只创建一个只调用core/-main
答案 1 :(得分:1)
简短的回答是否定的。
Clojure只有一种编译和运行代码的方法。如果从REPL运行程序或者在没有连接REPL的情况下运行它,程序的加载方式没有区别。 Clojure严格来说是一种编译语言虽然你可以在从REPL开始时选择从main
以外的函数开始,或者如果你希望它可以传递main不同的参数不同。
我的主要工作项目中有一个名为dev
的函数,我在这些情况下运行(dev比main短)。当主要启动时,也可以检查程序中是否存在nrepl连接,尽管这远离正常的Clojure实践。
作为深思熟虑的东西,考虑到你可以在程序运行两天之后将REPL轻松连接到程序,而不是在主程序启动之前连接REPL。