2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解有关此操作的一些更多信息。

0 投票
REPL

鉴于new tools.deps CLI功能,有一个{{clojure.main -m}}选项会很方便,该选项可以可选地调用特定函数,不仅仅是{{-main}}。

;;运行main clojure -m some.util args ... ;; 调用其他函数 clojure -m some.util/task args ... clojure -m some.util/another-task args ...

`
(ns some.util)

(defn -main [& args] ...)
(defn task [& args] ...)
(defn another-task [& args] ...)
`

使用{{clojure}}工具时,创建实用工具通常需要为每个"任务"创建新的命名空间(或求助于{{-e}}或{{script.clj}}文件)。

Leiningen支持{{lein run -m some.util/task ...}}符号。shadow-cljs也是如此。

5 个答案

0 投票

评论由: alexmiller

我认为最好还是添加一个新的标志(例如-f)来支持这个功能,而不是将新功能推送到-m上。

0 投票

评论由: mfikes

一个可以考虑的替代方案:模仿ClojureScript中现有的功能,ClojureScript有一个* }

`

cljs.user=> (doc main-cli-fn)

cljs.core/main-cli-fn
当编译为命令行目标时,无论{{main-cli-fn}}被设置为什么函数,都会以命令行
argv作为参数调用它
供应商
`

作为一个示例使用,使用{{foo.cljs}}

`
(defn greet [name]
(println (str "Hello " name "!")))

(set! main-cli-fn greet)
`

然后

$ planck foo.cljs 朋友 你好,朋友!

这种情况下,这种方法相对于 {{-m}} 或 {{-f}} 方法有很大的优势。比如如果你编写一个 shebang 脚本并希望通过命令行参数传递,最好以以下方式启动脚本:

`

!/usr/bin/env clojure

`

然后让 } 机制确保 } 被路由到那个函数,无需在 shebang 行中添加 {{-f some-qualified/function}},因为在 Linux 中在 shebang 行中无法指定解释器参数。

0 投票

评论由: alexmiller

哎呀,听起来很糟糕。 :) 我在 clj 中加入了一些新别名功能,可以帮助解决这些问题。

0 投票

评论者:thheller

补丁实现了所建议的 {{-f}} 参数,而不是改变现有的 {{-m}}。

0 投票
参考资料: https://clojure.atlassian.net/browse/CLJ-2316 (由 thheller 报告)
...