Clojure协议使用什么语言的特征是什么?
注意:这不是关于“如何使用协议”的问题
这是一个关于是什么启发这个想法的问题。
特别是,我想要的是:
然后,我可以去了解人们使用XYZ和ABC获取语言功能的方向。
谢谢!
答案 0 :(得分:7)
如果您了解Java,Clojure协议与Java接口类似 - 但更好。 Clojure website说明了协议(以及有关该页面协议的更多背景信息和基本原理):
- 提供高性能,动态多态性构造作为接口的替代
- 支持接口的最佳部分
- 仅限规范,无实施
- 单一类型可以实现多种协议
- 虽然避免了一些缺点
- 实现哪些接口是作者类型的设计时选择,以后不能扩展(尽管接口注入可能最终解决此问题)
- 实现接口会创建isa / instanceof类型关系和层次结构
- 通过允许不同方对类型,协议和协议类型的实现进行独立扩展来避免“表达式问题”
- 没有包装/适配器
- 支持90%的多方法案例(单一派遣类型),同时提供更高级别的抽象/组织
此外,您可能会发现Solving the Expression Problem with Clojure 1.2一个有趣的读物:
Clojure专家Stuart Sierra向您介绍了Clojure 1.2中解决表达式问题的新功能,这是一个典型的编程困境。协议允许您将预先存在的类型扩展到新方法,并且数据类型允许您将预先存在的方法扩展到新类型 - 所有这些都不需要更改现有代码。您还将了解Java™接口和类如何与Clojure协议和数据类型进行交互。
答案 1 :(得分:3)
我不知道,除了渴望解决表达式问题之外,Clojure协议是否受到某些启发,但是协议正在做与Haskell类型类似的事情,例如......
查看this question以获取更多信息 - 它还提到了Scala特征