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

Zub*_*air 5 java clojure

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

(proxy [Some Java Interface] []
  (some Java Method [args]
  ...
  Clojure code
  ...
  )
)
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*per 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"
Run Code Online (Sandbox Code Playgroud)