使用tools.cli,我怎样才能用可选的参数创建非可选参数?
我有一个功能
(defn parse-opts
[args]
(cli args
["-f" "--ifn" "input file"]
(optional ["-o" "--outp" ".csv pipe delimited output file"
:default "assess_pro_out.csv"] identity)
(optional ["-d" "--debug" "Debug flag for logging." :default 0
:parse-fn #(Integer. %)])))
编译但生成
Exception in thread "main" clojure.lang.ArityException:
Wrong number of args (2) passed to: PersistentVector
当我在没有参数的情况下运行我的主程序时。
如果此选项与其他选项一样
(optional ["-f" "--ifn" "input file"] identity)
一切正常。
我只想要一个参数是非可选的。我做错了什么?
我确实有一个解决方法,但我仍然想知道将可选和非可选参数混合到cli是否可以。
(defn -main
[& args]
(let [opts (parse-opts args)
start-time (str (Date.))
parsed-csv-data (if-not (:ifn opts)
(do
(println "Usage: assess-chk [-f -ifn] input-file-name")
(System/exit -2))
(utl/fetch-csv-data (:ifn opts)))
感谢。
答案 0 :(得分:2)
您使用的是旧版本的tools.cli(可能是v0.1.0)。对于 版本,您似乎应该使用(required ...)
作为必需选项。请参阅https://github.com/clojure/tools.cli/tree/a741b23f230123179fc518af772f1c057058f7d2
在当前版本的tools.cli中,选项始终是可选的,并且删除了可选和必需的功能。