我想知道在嵌入java代码的clojure代理中时是否有任何clojure代码或宏不起作用,例如:
(proxy [Some Java Interface] []
(some Java Method [args]
...
Clojure code
...
)
)
或者,我是否只能在代理中嵌入对Java函数的调用?
答案 0 :(得分:6)
任何Clojure代码都应在proxy
内完成。
在幕后,Clojure函数无论如何都被编译成Java对象,而调用Clojure函数在技术上就是一个Java方法调用本身。宏扩展仍然可以与proxy
一起正常工作。读者宏都能正常工作等。
user> (defmacro foo [] "FOO")
#'user/foo
user> (.toString (proxy [Object] []
(toString []
(str (foo) \space (reduce + (range 5))))))
"FOO 10"