2010-12-13 55 views
5

我想知道是否有任何Clojure的代碼或者嵌入的Java代碼Clojure的代理中不起作用的宏,如:所有的clojure代碼都在java代理中工作嗎?

(proxy [Some Java Interface] [] 
    (some Java Method [args] 
    ... 
    Clojure code 
    ... 
) 
) 

或者,我只能嵌入代理中調用Java函數?

回答

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" 
相關問題