Clojure中的reify是什么?

Ertugrul Cetin:

我无法理解Clojure reify函数的用法它在clojure中有什么用?

你能提供例子吗?

Piotrek Bzdyl:

reify宏允许创建匿名类,扩展java.lang.Object类和/或实现指定的接口/协议。API文档不明确说明的目的而提供的技术细节是什么呢宏。Java interop文档提供了有关目的的简短描述:

从Clojure 1.2开始,reify也可用于实现接口。

甚至可以在数据类型文档中找到更多信息,在这里可以找到非常详细的说明它的功能以及与之比较的方式proxy

deftype和defrecord定义命名类型时,reify定义匿名类型并创建该类型的实例。用例是您需要一次性实现一个或多个协议或接口,并希望利用本地上下文的情况。在这方面,它是用例,类似于Java中的代理或匿名内部类。

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

仅支持协议或接口,没有具体的超类。方法主体是结果类的真实方法,而不是外部fns。实例上方法的调用是直接的,而不使用映射查找。在方法图中不支持动态交换方法。结果在构造和调用方面都比代理更好。在所有约束都不是禁止的情况下,reify比代理更可取。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章