How to call Clojure Macros from Java? -
How to call Clojure Macros from Java? -
is there anyway phone call clojure macros java?
here trying do:
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 writes *out* default why need wrap macro with-out-str returns string.
i getting error:
[java] java.lang.illegalargumentexception: wrong number of args (1) passed to: core$with-out-str [java] @ clojure.lang.afn.throwarity(afn.java:437) [java] @ clojure.lang.restfn.invoke(restfn.java:412) [java] @ clojure.lang.var.invoke(var.java:365) [java] @ javaclojure.xml.main(unknown source)
you'll have roll own withoutstr.
class yourclass { static final var withbindings = rt.var("clojure.core", "with-bindings*"); static final var list = rt.var("clojure.core", "list*"); static final var out = rt.var("clojure.core", "*out*"); static final var prxml = rt.var("clojure.contrib.prxml", "prxml"); static string withoutstr(ifn f, object args...) { stringwriter wtr = new stringwriter(); withbindings.applyto(list.invoke(rt.map(out, wtr), f, args)); homecoming wtr.tostring(); } ... string stringxml = withoutstr(prxml, "[:name \"bob\"]"); }
java clojure clojure-contrib
Comments
Post a Comment