2012-10-31 25 views
1

我想知道如何在我的opts中访问默认参数,之后他们已被cli args抛出。我调用我的程序如何在Clojure cli中访问默认参数?

./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。

+0

看着输出,(:ifm1 opts)是“--ifn1”,(:ifn1 opts)是“standfiletrans_acre.csv” - 你在其他地方犯了一个错误。另外,如果你想找到问题,如果你知道你传递给'cli'的实际'args',它会有帮助 –

回答

2

:default关键字在完全不给出参数时使用。如果添加的说法,不提供值,然后提供一个参数它将读取下一个参数为提供给第一个参数的值:

[email protected]:~/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 

在这个例子中:默认值是唯一用于不在列表中的值。