我想知道当嵌入到java代码的clojure代理中时是否有任何clojure代码或宏不起作用,例如:
(proxy [Some Java Interface] []
(some Java Method [args]
...
Clojure code
...
)
)
Run Code Online (Sandbox Code Playgroud)
或者,我是否只能在代理中嵌入对Java函数的调用?
任何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"
Run Code Online (Sandbox Code Playgroud)