Clojure 在 repl 上加载文件并使用参数调用 -main
Clojure load-file on repl and call -main with arguments
我在 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
绑定; *command-line-args*
是 nil 因为你不是 运行 来自带有参数的命令行的代码,你是 运行 来自 REPL 的代码。
无论如何,使用 existing library to work with CLI args 可能比直接使用 *command-line-args*
更好。
我在 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
绑定; *command-line-args*
是 nil 因为你不是 运行 来自带有参数的命令行的代码,你是 运行 来自 REPL 的代码。
无论如何,使用 existing library to work with CLI args 可能比直接使用 *command-line-args*
更好。