Clojure协议使用什么语言的特征是什么?

4 clojure

Clojure协议使用什么语言的特征是什么?

注意:这不是关于"如何使用协议"的问题

这是一个关于是什么启发这个想法的问题.

特别是,我想要的是得到类似的东西:

  • XYZ + ABC启发了Clojure协议

然后,我可以去看看人们用XYZ和ABC学习语言功能的方向.

谢谢!

Ger*_*ert 7

如果您了解Java,Clojure协议与Java接口类似 - 但更好.在Clojure的网站说,这大约协议(并有更多的背景信息和理由有关页面上的协议):

  • 提供高性能,动态多态性构造作为接口的替代方案
  • 支持接口的最佳部分
    • 仅限规范,无实施
    • 单一类型可以实现多种协议
  • 同时避免一些弊端
    • 实现哪些接口是作者类型的设计时选择,以后不能扩展(尽管接口注入可能最终解决此问题)
    • 实现接口会创建isa/instanceof类型关系和层次结构
  • 通过允许不同方对类型,协议和类型协议的实现的独立扩展来避免"表达问题"
    • 这样做没有包装/适配器
  • 支持90%的多方法(单一调度类型),同时提供更高级别的抽象/组织

此外,您可能会发现使用Clojure 1.2解决表达式问题是一个有趣的读物:

Clojure专家Stuart Sierra向您介绍了Clojure 1.2中解决表达式问题的新功能,这是一个典型的编程困境.协议让你预先存在扩展类型的新方法和数据类型让你预先存在的方法扩展到新的类型 - 所有这些都不改变现有的代码.您还将了解Java™接口和类如何与Clojure协议和数据类型进行交互.

  • 请注意,Java 接口又直接取自 Objective-C 协议(Objective-C 是对 Java 设计的*主要*影响)。Objective-C 协议的灵感来自于 Smalltalk 中的协议思想,在 Smalltalk 中协议纯粹是一种文档约定,而 Objective-C 将其转变为一种语言功能。 (2认同)