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

欢迎!请查看 关于 页面,了解有关如何使用本页面的更多信息。

0
REPL

鉴于 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 中的现有功能,它有一个 * }。

`

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 Friend Hello Friend!

这种情况在与其他{{-m}}或{{-f}}方法相比较时具有优势的一个地方是,如果你创建了一个shebang脚本并希望传输命令行参数,可以简单地用以下方式启动该脚本:

`

#!/usr/bin/env clojure

`

然后让 } 机制保证 } 被路由到该函数,而无需在shebang行中放置{{-f some-qualified/function}},在Linux上不允许在shebang行中指定解释器参数。

0

由 alexmiller 发布的评论

哈哈,听起来很糟糕。 :) 我在clj中添加了一些新的别名功能,这将有助于解决这些问题。

0

评论者:thheller

Patch实现了建议的{{-f}}参数,而不是更改现有的{{-m}}。

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