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 参数调用
argv 作为参数
`

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

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

(set! main-cli-fn greet)
`

然后

$ planck foo.cljs Friend Hello Friend!

在这种方式下,相较于{{-m}}或{{-f}}方法,有一种情况特别有利,就是当你创建一个shell脚本并希望传递命令行参数时,你可以轻松地通过以下方式启动该脚本:

`

#!/usr/bin/env clojure

`

然后让}}机制确保}}被路由到该函数,而无需在shell脚本的开头(在Linux中无法在shebang行中指定解释器参数)使用{{-f some-qualified/function}}。

0

评论由:alexmiller 发布

呃,听起来很奇怪。:) 在clj中我有一些新的别名功能,这将有助于完成这项工作。

0

评论者:thheller

补丁实现了所提出的{{-f}}参数,而不是更改现有的{{-m}}。

0
...