1

我想知道如何在我的 opts 中访问默认参数,在它们被 cli args 解析之后。我正在调用我的程序

./rexfer --ifn1 --ifm1 --ofn1 --ofn3

(defn parse-args
  "Using the newer cli library, parses command line args."
  [args]
  (cli args
       ["-r" "--ifn1" ".csv input file"  :default "standfiletrans_acre.csv"]
       ["-p" "--ifn2" ".csv input file"  :default "pp_report_to_change.csv"]
       ["-m" "--ifm1" ".csv input file"  :default "columns.csv"]
       ["-v" "--ofn1" ".csv output file" :default "re_values.csv"]
       ["-x" "--ofn2" ".csv output file" :default "re_pp.csv"]
       ["-u" "--ofn3" ".csv output file" :default "re_mixed_use_ratio.csv"]
       ["-t" "--rpt"  ".csv pipe delimited output file" :default "xfer.csv"]))

(defn -main 
  [& args]
  (let [[opts args banner] (parse-args args)

这是 opts 解析后的输出

{:rpt xfer.csv, :ofn3 re_mixed_use_ratio.csv, :ofn2 re_pp.csv, :ofn1 --ofn3, :ifm1 --ifn1, :ifn2 pp_report_to_change.csv, :ifn1 standfiletrans_acre.csv}

(:ifn1 opts) 返回--ifn1,而不是standfiletrans_acre.csv。

4

1 回答 1

2

:default根本没有给出参数时使用关键字。如果添加参数,不提供值,然后提供下一个参数,它将读取下一个参数作为提供给第一个参数的值:

arthur@a:~/args/src/args$ lein run --ifn1 --FOO --ifn2 --ifm1  
All namespaces already :aot compiled.
options are:                                                
{:rpt "xfer.csv"
 :ofn3 "re_mixed_use_ratio.csv",
 :ofn2 "re_pp.csv", 
 :ofn1 "re_values.csv",
 :ifm1 "columns.csv", 
 :ifn2 "--ifm1",   
 :ifn1 "--FOO"} 
arguments are: 
[] 
the banner text is: 
 Usage:                             

 Switches    Default                  Desc           
 --------    -------                  ----   
 -r, --ifn1  standfiletrans_acre.csv  .csv input file 
 -p, --ifn2  pp_report_to_change.csv  .csv input file 
 -m, --ifm1  columns.csv              .csv input file   
 -v, --ofn1  re_values.csv            .csv output file 
 -x, --ofn2  re_pp.csv                .csv output file 
 -u, --ofn3  re_mixed_use_ratio.csv   .csv output file                      
 -t, --rpt   xfer.csv                 .csv pipe delimited output file   

在此示例中, :default 值仅用于不在列表中的值。

于 2012-10-31T23:46:39.003 回答