有沒有辦法從Java調用Clojure宏?如何從Java調用Clojure宏?
這裏就是我想要做:
RT.var("clojure.core", "require").invoke(Symbol.create("clojure.contrib.prxml"));
Var prxml = RT.var("clojure.contrib.prxml", "prxml");
Var withOutStr = RT.var("clojure.core", "with-out-str");
String stringXML = (String) withOutStr.invoke((prxml.invoke("[:Name \"Bob\"]")));
prxml默認這就是爲什麼我需要帶出-STR它返回字符串宏來包裝它寫到*出*。
我收到此錯誤:
[java] java.lang.IllegalArgumentException: Wrong number of args (1) passed to: core$with-out-str
[java] at clojure.lang.AFn.throwArity(AFn.java:437)
[java] at clojure.lang.RestFn.invoke(RestFn.java:412)
[java] at clojure.lang.Var.invoke(Var.java:365)
[java] at JavaClojure.xml.main(Unknown Source)
你甚至可以從Java調用宏嗎?我對Clojure瞭解不多,但在Lisp中,宏在編譯代碼之前由讀者進行評估。如果Clojure的方式相同,那麼從Java調用可能爲時已晚。宏在Clojure中何時擴展? –
是的,你可以從Java調用Clojure宏,但是你需要調用Clojure閱讀器(以便編譯器被調用並擴展宏),而不是特定的函數(因爲函數已經被編譯!)。可能值得檢查這個問題的答案:http://stackoverflow.com/questions/2181774/calling-clojure-from-java – mikera
mikera,我認爲你是在一些東西。我想知道是否有一種很好的方法可以在Java中的宏中調用clojure reader。 – mudge