我在 core.clj 中的 clojure 中完成了一些编码,其中有一个可以接受 0 个或多个参数的 -main 方法:
(defn -main
"dequeue function"
[& args]
我正在加载此 clj 文件:
(load-file "src/exercise/core.clj")
然后我尝试学习如何在 repl 中调用它以开发 core_test.clj (如果有任何关于如何开发此自动测试的提示,请也给我一些提示)。我现在想做的是:
(-main "resources\\sample-input.json" "a")
但是这是打印“Arguments 0”,这是我告诉代码打印的消息,只是为了查看传递了多少个参数
(println "Arguments" (count *command-line-args*))
我该怎么做? 谢谢!
最佳答案
i'm trying to learn how to call this within repl in order to develop core_test.clj
通常,您会编写从 -main
调用的其他函数并测试这些函数,而不是应用的入口点 -main
。
但是您应该能够像调用任何其他函数一样调用-main
。我有一个 src/sandbox/main.clj 文件:
(ns sandbox.main)
(defn -main [& args]
(prn args))
在项目文件夹中启动 REPL,我可以像这样调用 -main
:
(use 'sandbox.main) ;; (load-file "src/sandbox/main.clj") also works
=> nil
(in-ns 'sandbox.main)
=> #object[clojure.lang.Namespace 0x67ccce04 "sandbox.main"]
(-main "some" "args")
;; ("some" "args")
=> nil
不过,我的示例有一个关键区别:它打印 -main
的 args
绑定(bind); *command-line-args*
为零,因为您不是从带有 args 的命令行运行代码,而是从 REPL 运行它。
无论如何,使用 existing library to work with CLI args 可能是一个更好的主意。而不是直接*command-line-args*
。
关于Clojure 在 repl 上加载文件并使用参数调用 -main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48858274/