Clojure在repl上加载文件,使用参数调用call -main

时间:2018-02-19 00:52:29

标签: clojure main

我在core.clj中的clojure中做了一些编码,它有一个-main方法,可以接受0个或更多的参数:

(defn -main
  "dequeue function"
   [& args]

我正在加载此clj文件:

(load-file "src/exercise/core.clj")

然后我试图学习如何在repl中调用它来开发core_test.clj(如果有关于如何开发此自动测试的任何提示,请给我一些提示)。我现在要做的是:

(-main "resources\\sample-input.json" "a")

但这是印刷" 参数0 "这是一条消息,我告诉代码打印只是为了看看有多少参数与

一起传递
(println "Arguments" (count *command-line-args*))

我如何做到这一点? 谢谢!

1 个答案:

答案 0 :(得分:2)

  

我试图学习如何在repl中调用它来开发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*为零,因为您没有使用args从命令行运行代码,而是从REPL运行它。

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