所有clojure代码都在java代理中工作吗?

时间:2010-12-13 22:21:48

标签: java clojure

我想知道在嵌入java代码的clojure代理中时是否有任何clojure代码或宏不起作用,例如:

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

或者,我是否只能在代理中嵌入对Java函数的调用?

1 个答案:

答案 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"