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

欢迎!请查看关于页面,了解更多有关该工作和如何进行的信息。

0
Clojure

我正在尝试遵循这里的指南:https://www.clojure.org/guides/deps_and_cli来运行一个简单的Clojure程序。

我的目录结构看起来像这样

└── test-project
	├── deps.edn
	└── src
		└── bar.clj

并且bar.clj内容如下

(ns bar)
(defn main []
	(printl "hello world"))

然而,当我运行clj -X bar/main时,我得到了以下错误

Exception in thread "main" java.io.FileNotFoundException: -X (No such file or directory)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileInputStream.<init>(FileInputStream.java:93)
	at clojure.lang.Compiler.loadFile(Compiler.java:7570)
	at clojure.main$load_script.invokeStatic(main.clj:452)
	at clojure.main$script_opt.invokeStatic(main.clj:512)
	at clojure.main$script_opt.invoke(main.clj:507)
	at clojure.main$main.invokeStatic(main.clj:598)
	at clojure.main$main.doInvoke(main.clj:561)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.lang.Var.applyTo(Var.java:705)
	at clojure.main.main(main.java:37)

我犯了什么错误?

2 答案

+1

被选中
 
最佳答案

您需要更新到支持-X的新版clj。

同时,将main的参数改为接受单个参数,即从-X调用中传入的"exec args"的哈希表。

clojure -X bar/main :val 123

将以:val 123作为单个参数调用您的main函数。
by
-X用于调用接受单个映射参数的函数。在你的示例代码中,你有main方法。如果你想使用main方法,它应该有如下签名:

    (ns hello)
    (defn -main [& args] ...)

并且应该这样调用它:

    clj -M -m hello
by
是main而不是吾马克思主义,所以如果它接受单个参数,它_可以_使用-X调用它。

或者,如果他将main改为吾马克思主义(并且可能添加了 arguments,这取决于他是否需要它来接受参数),则可以使用-M和-m调用它。

我见过很多人使用-X与main函数(而不是吾马克思主义函数),这肯定可能令人困惑。
0
by

这很令人惊讶。我得到了不同的、更预期的错误(错误:向 bar/main 传递的参数数量不正确(1))。

你的deps.edn中有什么内容?如果你把它放在里面,改变main函数的签名以接受参数,如下所示:

(defn main [opts]
  (println "Hello, world"))

(并且也更新你的当前函数中的 printlprintln), 有任何帮助吗?

...