15

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时,哪个更好?

更新:

我发现了一些东西:

  • proxy 不需要thisas 第一个参数。
  • 代理支持超类。
  • 代理支持参数。
4

1 回答 1

21

来自Clojure.org 的数据类型概述

的方法体reify是词法闭包,可以引用周围的局部作用域。reify不同之处proxy在于:

  • 仅支持协议或接口,不支持具体的超类。
  • 方法体是结果类的真实方法,而不是外部 fns。
  • 在实例上调用方法是直接的,而不是使用映射查找。
  • 不支持方法映射中方法的动态交换。

结果是proxy在构造和调用方面都比 更好的性能。比在其约束条件不禁止的所有情况下都reify更可取。proxy

来源:http ://clojure.org/datatypes

于 2012-06-13T08:25:15.750 回答