(defmacro run "Loads the specified namespace and invokes its \"main\" function with optional args. ns-name is not evaluated." [ns-name & args] `(do (require '~ns-name :reload-all) ((ns-resolve '~ns-name '~'main) ~...@args)))
An example namespace that works with it (in hello.clj at a classpath root):
(ns hello) (defn main [& args] (apply println "hi" args)) and a REPL session: user=> (run hello) hi nil user=> (run hello :clojure "is" \# (.gcd (bigint 1169687) (bigint 311791))) hi :clojure is # 1 nil user=>I think the quoting on "main" in the ns-resolve call is quite interesting. macroexpand-ing variations on it is a heap of educational Clojure macro-fu fun!
--Steve
smime.p7s
Description: S/MIME cryptographic signature