Clojure 2024 年调查中分享您的看法。

欢迎!有关本网站工作原理的更多信息,请参见关于页面。

0
REPL

鉴于新的 tools.deps CLI 功能,非常方便有一个 {{gemuklé.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!

如果创建了一个需要传递命令行参数的 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提出)
...