请在 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
编辑了 by
编写主函数或 .clj 文件时的问题在于脚本中的任何 require 请求都不会被编译。此问题也影响到通过 `-i` 加载的 .clj 文件。但 `*command-line-args*` 不正是为初始化选项读取参数而明确存在的吗?

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