【问题标题】:What feature of what language does Clojure Protocols derive from?Clojure 协议源自什么语言的什么特性?
【发布时间】:2012-07-14 20:11:05
【问题描述】:

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

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

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

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

  • XYZ + ABC 启发的 Clojure 协议

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

谢谢!

【问题讨论】:

    标签: clojure


    【解决方案1】:

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

    查看this question 了解更多信息 - 它还提到了 Scala 特征

    【讨论】:

      【解决方案2】:

      如果您了解 Java,Clojure 协议类似于 Java 接口 - 但更好。 Clojure website 谈到了协议(该页面上有更多关于协议的背景信息和基本原理):

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

      此外,您可能会发现Solving the Expression Problem with Clojure 1.2 是一篇有趣的文章:

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

      【讨论】:

      • 请注意,反过来,Java 接口直接取自 Objective-C 协议(Objective-C 是对 Java 设计的主要影响)。因此,Objective-C 协议的灵感来自于 Smalltalk 中的协议思想,在 Smalltalk 中这纯粹是一种文档约定,而 Objective-C 将其变成了一种语言特性。
      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2017-08-06
      • 2016-05-30
      • 2019-04-08
      • 1970-01-01
      相关资源
      最近更新 更多