5
我想知道是否有任何Clojure的代碼或者嵌入的Java代碼Clojure的代理中不起作用的宏,如:所有的clojure代碼都在java代理中工作嗎?
(proxy [Some Java Interface] []
(some Java Method [args]
...
Clojure code
...
)
)
或者,我只能嵌入代理中調用Java函數?
我想知道是否有任何Clojure的代碼或者嵌入的Java代碼Clojure的代理中不起作用的宏,如:所有的clojure代碼都在java代理中工作嗎?
(proxy [Some Java Interface] []
(some Java Method [args]
...
Clojure code
...
)
)
或者,我只能嵌入代理中調用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"