为什么我应该使用Reify代替clojure中的代理?
为什么我应该使用Reify代替clojure中的代理?
reify
的方法体是词法closures,可以参考周围的本地范围。 reify
与proxy
不同的地方在于:
- 只支持协议或接口,没有具体的超类。
- 方法体是结果类的真实方法,而不是外部fns。
- 在实例上调用方法是直接的,而不是使用地图查找。
- 不支持方法映射中方法的dynamic交换。
结果是比代理更好的性能,无论是在构build和调用。 在其约束不是禁止的情况下,更可取的是proxy
。
来源: http : //clojure.org/datatypes
除非您需要重写基类方法,否则请使用reify
来代替您曾经使用过的proxy
。