2011-03-08 14 views
5

Bir kullanıcı komut satırı argümanları sağlamazsa, Hello World'ün hata izleme yerine kullanım bilgilerini yazdırmasını istiyorum.Kaçınılması gereken yollar "main" iş parçasındaki özel durum 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) 

cevap

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

Bu adil bir bit artırabilir, ama bu makul bir anahat bu.

+0

Teşekkürler adamım! Clojure'da değerli bir kaynak olduğunu kanıtlıyorsun. – mcandre

+1

Ayrıca, seçenek ayrıştırma kütüphanem https://github.com/amalloy/clojopts adresine de göz atmak isteyebilirsiniz. Henüz kullanım mesajları yapmıyor, ancak istek listesinde bulunuyor ve isterseniz katkıda bulunabilirsiniz. – amalloy

İlgili konular