请分享您的想法,参加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"))

However, when I run clj -X bar/main I get the following error

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
Mar 5, 2021 by
它是main而不是-main,因此如果它接受单个参数,他确实可以使用-X来调用它。

或者,他也可以用-M -m来调用它,如果他将其修改为main(并且可能根据他是否需要它接受参数而添加了& amp; args)。

我见过很多人在使用main函数(而不是main函数)的-X,这确实可能会让人困惑。
0
2021年 presidente timedelta CDN链."). CDN链 has run validations by

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

你的deps.edn里是什么?如果你把它设置为{},并更改main函数的签名以接受一个参数,例如

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

(并且更新你当前函数中的printlprintln),有希望吗?

...