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))))
Run Code Online (Sandbox Code Playgroud)
结果是一样的,当使用代理或reify时,有什么更好的?
更新:
我发现了一些东西
this作为第一个参数.Vie*_*jes 20
方法体
reify是词法闭包,可以参考周围的局部范围.reify不同之处proxy在于:
- 仅支持协议或接口,不支持具体的超类.
- 方法体是结果类的真实方法,而不是外部fns.
- 在实例上调用方法是直接的,而不是使用地图查找.
- 不支持方法映射中的方法的动态交换.
结果是
proxy在构造和调用方面都有更好的性能.在其约束条件不高的所有情况下reify都是优选的proxy.
资料来源:http://clojure.org/datatypes
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |