【问题标题】:Ways to avoid Exception in thread "main" clojure.lang.ArityException?在线程“main”clojure.lang.ArityException 中避免异常的方法?
【发布时间】:2011-03-08 02:10:09
【问题描述】:

当用户不提供命令行参数时,我希望 Hello World 打印使用信息而不是错误跟踪。

":";exec clj -m `basename $0 .clj` ${1+"$@"}
":";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)

【问题讨论】:

    标签: clojure command-line-arguments main


    【解决方案1】:
    (defn -main [& args]
      (if-not (first args)
        (usage)
        (println "Hello" (first args))))
    

    您可以在这方面进行一些改进,但这是一个合理的大纲。

    【讨论】:

    • 谢谢你!事实证明,您是 Clojure 上的宝贵资源。
    • 您可能还想查看github.com/amalloy/clojopts,我的选项解析库。它还没有使用信息,但它在愿望清单上,如果你愿意,可以贡献它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多