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

虽然我的示例有一个关键区别:它打印 -mainargs 绑定; *command-line-args* 是 nil 因为你不是 运行 来自带有参数的命令行的代码,你是 运行 来自 REPL 的代码。

无论如何,使用 existing library to work with CLI args 可能比直接使用 *command-line-args* 更好。