gpt4 book ai didi

clojure - 何时将 -M、-A 或 -X 与 Clojure CLI 一起使用?

转载 作者:行者123 更新时间:2023-12-03 21:05:41 24 4
gpt4 key购买 nike

我总是将 -A 与 clojure 工具一起使用,但有些警告说我应该使用 -M 代替,我找到了 this doc ,但还没有得出何时使用每个工具的结论。

最佳答案

Clojure CLI 仍在不断发展,因此 -X 选项相对较新,并且 -M 选项的含义在同一时间范围内发生了变化。
您可以在此处查看 CLI 版本和简短的发行说明:https://clojure.org/releases/tools
直到 2020 年年中,您都在使用 -A-M 只是运行 :main-opts —— 它不尊重任何类路径选项或解析选项。
在 1.10.1.697 版本(2020 年 9 月 25 日)中,引入了 -X 选项以允许执行特定的 Clojure 函数,将数据的哈希映射作为单个参数传递。该版本还扩展了 -M 选项的行为,以尊重 :extra-paths:extra-deps 以及运行 :main-opts - 有效地使 -M 等同于 -A
这些选项的工作方式和 CLI 的整体行为发生了相当多的变化,直到大约一个月后 1.10.1.727(2020 年 10 月 21 日)才稳定下来。在此期间,-A 选项运行 :main-opts 的行为实际上已被弃用:如果您现在使用 -A 运行 :main-opts,您将收到警告,提示您应该改用 -M
一些基于 Clojure CLI 和 deps.edn 的社区工具在其 README 中有说明,您需要至少使用 1.10.1.727 版本才能利用它们的功能。版本 1.10.3.814 是当前版本(截至 2021 年 3 月 16 日)。随着 CLI 添加新功能(并且可能很快会进行另一轮更改),保持最新状态是值得的。
所有这些的 TL; DR 是:

  • 使用 -M 来运行 clojure.main 和任何 :main-opts——这包括 -m 来标识一个命名空间,其 -main 函数应该被执行,还有 -e 来评估一个表达式。请注意,-main 是一个可变参数函数,它使用零个或多个 String 参数调用。
  • 使用 -X 运行特定函数,将单个哈希映射作为其参数,除了 :exec-args 中的 deps.edn 之外,还通过命令行传入键/值对。请注意,-X 接受 EDN 值,这意味着需要在命令行上仔细引用字符串: '"A string"' -- 双引号用于 EDN 字符串,单引号用于确保值按原样通过 shell 。在 Windows 上,通过 cmd.exe 或 Powershell,引用比这更复杂(在 Linux 和 macOS 上使用 Clojure CLI 要容易得多,因此对于 Windows,值得考虑 WSL2)。
  • 使用 -A 启动 REPL。现在,这意味着你需要小心混合 :main-opts 和你在启动 REPL 时使用的别名(因为 -A 仍然运行 :main-opts 但在某些时候它会停止这样做)。

  • 现在另一个有用的选项是 -P -- prepare -- 您可以在 clojure 之后(在 -X-M-A 之前)立即添加它,它可以让 CLI 计算和解析来自 deps.edn 文件和提供的别名(和下载 Maven/Clojars JAR 并克隆 git deps),但在函数实际执行之前停止( -X 的特定函数、 clojure.main-M-A 的 REPL)。
    关于版本的最后说明:尽管 CLI 版本号以 Clojure 版本号为前缀,但它们并没有直接联系。您可以使用任何版本的 CLI 运行任何版本的 Clojure(回到 1.0.0)。 CLI 的版本号是 x.y.z.commits,其中 x.y.z 是 Clojure 的默认版本,如果您不通过别名或项目的 deps.edn 文件覆盖它,您将获得它。

    关于clojure - 何时将 -M、-A 或 -X 与 Clojure CLI 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66925857/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com