为什么我应该使用Reify代替clojure中的代理?

为什么我应该使用Reify代替clojure中的代理?

reify的方法体是词法closures,可以参考周围的本地范围。 reifyproxy不同的地方在于:

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

结果是比代理更好的性能,无论是在构build和调用。 在其约束不是禁止的情况下,更可取的是proxy

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

除非您需要重写基类方法,否则请使用reify来代替您曾经使用过的proxy