Hier ist ein Beispiel für die Verwendung des with-command-lineMakros. Der folgende Code gibt eine triviale Klasse mit einer Hauptmethode an, die nichts anderes tut, als die Werte ihrer Befehlszeilenargumente auszudrucken.
(ns cmd-line-demo
(:gen-class)
(:use clojure.contrib.command-line))
(defn -main [& args]
(with-command-line args
"Command line demo"
[[foo "This is the description for foo" 1]
[bar "This is the description for bar" 2]
[boolean? b? "This is a boolean flag."]
remaining]
(println "foo: " foo)
(println "bar: " bar)
(println "boolean?: " boolean?)
(println "remaining: " remaining)))
Kompilieren Sie die Klasse in der REPL:
user> (compile 'cmd-line-demo)
cmd-line-demo
Anwendungsbeispiel
1) Wenn Sie keine Befehlszeilenargumente ausführen, werden die Hilfeinformationen angezeigt. Die Hilfeinformationen können auch mit --helpoder -hFlags angezeigt werden. Beachten Sie, dass die Hilfeinformationen automatisch aus Ihrer cmdspec generiert werden.
$ java -classpath . cmd_line_demo
Command line demo
Options
--foo <arg> This is the description for foo [default 1]
--bar <arg> This is the description for bar [default 2]
--boolean, -b This is a boolean flag.
2) Nicht angegebene Argumente erhalten den in der cmdspec-Bindung angegebenen Standardwert. Hat beispielsweise bareinen Standardwert von 2.
$ java -classpath . cmd_line_demo --foo "changed value"
foo: changed value
bar: 2
boolean?: nil
remaining: []
3) Boolesche Flags werden mit dem Suffix "?" in der cmdspec. Beachten Sie, dass die Flagge selbst nicht nicht enthalten das „?“ als Teil seines Namens.
$ java -classpath . cmd_line_demo -boolean
foo: 1
bar: 2
boolean?: true
remaining: []
4) Beachten Sie auch, dass Sie Flag-Aliase angeben können, indem Sie mehrere Symbole in der cmdspec angeben. Ich habe das mit den boolean?und b?Flags gemacht.
5) Schließlich habe ich angegeben, dass remainingalle verbleibenden Argumente ohne zugehörige Flags erfasst werden.
$ java -classpath . cmd_line_demo -foo test file1 file2 file3
foo: test
bar: 2
boolean?: nil
remaining: [file1 file2 file3]