2011-03-08 13 views
5

जब कोई उपयोगकर्ता कोई कमांड लाइन तर्क नहीं देता है, तो मैं चाहता हूं कि हैलो वर्ल्ड एक त्रुटि ट्रेस के बजाय उपयोग जानकारी मुद्रित करे।धागे "मुख्य" clojure.lang.ArityException में अपवाद से बचने के तरीके?

":";exec clj -m `basename $0 .clj` ${1+"[email protected]"} 
":";exit 

(ns hello 
    (:gen-class)) 

(defn -main 
    [greetee] 
    (println (str "Hello " greetee "!"))) 

$ ./hello.clj Fred 
Hello Fred! 
$ ./hello.clj 
Exception in thread "main" clojure.lang.ArityException: Wrong number of args (0) passed to: hello$-main 
    at clojure.lang.AFn.throwArity(AFn.java:439) 
    at clojure.lang.AFn.invoke(AFn.java:35) 
    at clojure.lang.Var.invoke(Var.java:397) 
    at clojure.lang.AFn.applyToHelper(AFn.java:159) 
    at clojure.lang.Var.applyTo(Var.java:518) 
    at clojure.core$apply.invoke(core.clj:600) 
    at clojure.main$main_opt.invoke(main.clj:323) 
    at clojure.lang.FnLoaderThunk.invoke(FnLoaderThunk.java:36) 
    at clojure.main$main.doInvoke(main.clj:426) 
    at clojure.lang.RestFn.invoke(RestFn.java:422) 
    at clojure.lang.FnLoaderThunk.invoke(FnLoaderThunk.java:36) 
    at clojure.lang.Var.invoke(Var.java:405) 
    at clojure.lang.AFn.applyToHelper(AFn.java:165) 
    at clojure.lang.Var.applyTo(Var.java:518) 
    at clojure.main.main(main.java:37) 

उत्तर

6
(defn -main [& args] 
    (if-not (first args) 
    (usage) 
    (println "Hello" (first args)))) 

आप इस एक निष्पक्ष बिट पर सुधार कर सकते हैं, लेकिन यह एक उचित रूपरेखा है।

+0

धन्यवाद आदमी! आप क्लोजर पर एक मूल्यवान संसाधन साबित हो रहे हैं। – mcandre

+1

आप https://github.com/amalloy/clojopts, मेरी विकल्प-पार्सिंग लाइब्रेरी भी देखना चाहेंगे। यह अभी तक उपयोग संदेश नहीं करता है, लेकिन यह इच्छा सूची पर है और यदि आप चाहें तो इसे योगदान दे सकते हैं। – amalloy

संबंधित मुद्दे