【问题标题】:What is the difference between proxy and reify?proxy 和 reify 有什么区别?
【发布时间】:2012-06-13 08:02:46
【问题描述】:

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))))

结果是一样的,使用proxy或者reify,哪个更好?

更新:

我发现了一些东西:

  • 代理不需要this作为第一个参数。
  • 代理支持超类。
  • 代理支持参数。

【问题讨论】:

    标签: clojure


    【解决方案1】:

    来自Clojure.org's overview of data types

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      相关资源
      最近更新 更多