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

时间:2011-04-28 16:26:55

标签: clojure

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

2 个答案:

答案 0 :(得分:49)

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

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

结果是在构造和调用方面都比代理更好的性能。 reify优于proxy,但在所有情况下,其约束都不会过高。

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

答案 1 :(得分:12)

使用reify,除非您需要覆盖基类方法,否则请使用proxy