4

Clojure 协议源自什么语言的什么特性?

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

这是一个关于是什么激发了这个想法的问题。

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

  • XYZ + ABC 启发了 Clojure 协议

然后,我可以开始阅读人们使用 XYZ 和 ABC 获得语言功能的方向。

谢谢!

4

2 回答 2

7

如果您了解 Java,Clojure 协议类似于 Java 接口——但更好。Clojure 网站对协议进行了这样的说明(并且该页面上有更多关于协议的背景信息和基本原理):

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

此外,您可能会发现用 Clojure 1.2 解决表达式问题很有趣:

Clojure 专家 Stuart Sierra 向您介绍了 Clojure 1.2 中解决表达式问题的新功能,这是一个经典的编程难题。协议允许您将预先存在的类型扩展为新方法,而数据类型允许您将预先存在的方法扩展为新类型——所有这些都无需更改现有代码。您还将看到 Java™ 接口和类如何与 Clojure 协议和数据类型进行交互。

于 2012-07-16T00:12:59.783 回答
3

我不知道,除了解决表达式问题的愿望之外,Clojure 协议是否受到某些东西的启发,但是协议正在做与 Haskell 类型类类似的事情,例如......

查看这个问题以获取更多信息 - 它还提到了 Scala 特征

于 2012-07-16T06:23:25.983 回答