proxy和reify有什么区别?我有一些示例代码:
(.listFiles (java.io.File. ".")
(proxy
[java.io.FileFilter] []
(accept [f]
(.isDirectory f))))
(.listFiles (java.io.File. ".")
(reify
java.io.FileFilter
(accept [this f]
(.isDirectory f))))
结果相同,当使用代理或reify时,哪个更好?
更新
我找到了一些东西:
this
作为第一个参数。答案 0 :(得分:20)
来自Clojure.org's overview of data types:
reify
的方法体是词法闭包,可以引用周围的局部范围。reify
与proxy
的不同之处在于:
- 仅支持协议或接口,不支持具体的超类。
- 方法体是结果类的真实方法,而不是外部fns。
- 在实例上调用方法是直接的,而不是使用地图查找。
- 不支持在方法图中动态交换方法。
结果在构造和调用方面都比
proxy
具有更好的性能。reify
优于proxy
,但在所有情况下,其约束都不会过高。