能否通过命令行设置Leiningen的:main值而非修改文件?
当然可行!用Leiningen动态指定运行目标
完全不用每次修改project.clj里的:main值——Leiningen本身就提供了更灵活的方式,完美适配你演示时快速切换示例的需求,刚好能发挥Clojure动态特性的优势。
最直接的方法:lein run -m 指定命名空间
Leiningen的run命令支持通过-m参数直接指定要运行的命名空间,跳过project.clj里的:main配置,演示时切换起来又快又炫酷。
假设你有两个示例命名空间:
my.clojure.demo.example-one(包含-main入口函数)my.clojure.demo.example-two(包含-main入口函数)
你只需要在命令行执行:
# 运行第一个示例 lein run -m my.clojure.demo.example-one # 运行第二个示例,还能直接传命令行参数 lein run -m my.clojure.demo.example-two "演示参数1" "演示参数2"
这样就能直接触发对应命名空间里的-main函数,全程不用碰project.clj,完全符合动态语言的直观特性。
额外技巧:灵活调用非-main函数
如果你的示例没有统一用-main函数,还可以用lein repl展示动态执行的能力:
- 启动REPL:
lein repl - 在REPL里直接调用目标函数:
(my.clojure.demo.example-one/start-demo) (my.clojure.demo.example-two/run-sample)
这种方式更适合临时调试或展示Clojure的交互特性,演示时能直观体现语言的动态优势。
小提示
如果用lein run -m方式,要确保目标命名空间里的入口函数名为-main,并且支持接收可变参数(比如(defn -main [& args] ...)),这样才能正确接收命令行传入的参数。
内容的提问来源于stack exchange,提问作者hawkeye
相关产品推荐
相关产品推荐

