我为什么要在clojure中使用Reify而不是代理?

Zub*_*air 37 clojure

我为什么要在clojure中使用Reify而不是代理?

Kus*_*alP 50

方法体reify是词法闭包,可以参考周围的局部范围.reify不同之处proxy在于:

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

结果是在构造和调用方面都比代理更好的性能.在其约束条件不高的所有情况下reify都是优选的proxy.

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


sem*_*ros 12

使用reify您曾经使用过的地方proxy,除非您需要覆盖基类方法.