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

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

0
Clojure

我想执行clojure -M -e "(compile 'foo.bar)" --some --args其中foo.bar包含如下代码:

(require (slurp (first *command-line-args*)))

此代码将根据某些复杂的命名空间列表动态包含额外的命名空间。

但是,示例中的--some被“丢失”,clojure.main尝试将其读取为一个路径,因为没有方法“跳过”main-opts。我一直通过传入/dev/null来进行欺骗,这似乎有效。通常使用来解决这个问题。

我尝试查看了clojure.main的源代码,似乎存在一个“nil”选项,但它没有文档,我无法找出如何激活它!

1 答案

0

我认为这超出了clojure.main试图支持的范畴。您可以编写.clj文件或编写main等来解决这个问题。

by
edited by
写主或.clj文件的问题在于,对脚本的任何require将不会被编译。这个问题也影响了通过`-i`加载的.clj文件。但是,`*command-line-args*`不是专门用于init opts读取参数的吗?

看起来在clojure.main这里确实存在一个bug:https://github.com/clojure/clojure/blob/30a36cbe0ef936e57ddba238b7fa6d58ee1cbdce/src/clj/clojure/main.clj#L558,因为这个选项永远不会被触发。我现在意识到了为什么它在那里。遗憾的是,旁边没有`"--"`,否则将会完美。
...