0

使用 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)))

谢谢。

4

1 回答 1

2

您使用的是旧版本的 tools.cli(可能是 v0.1.0)。对于版本,您似乎应该使用(required ...)所需的选项。请参阅https://github.com/clojure/tools.cli/tree/a741b23f230123179fc518af772f1c057058f7d2上的文档

在当前版本的 tools.cli 中,选项始终是可选的,并且删除了可选和必需的功能。

于 2012-08-24T20:15:24.730 回答