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

时间:2012-07-15 23:32:51

标签: clojure

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

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

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

特别是,我想要的是:

  • XYZ + ABC启发了Clojure协议

然后,我可以去了解人们使用XYZ和ABC获取语言功能的方向。

谢谢!

2 个答案:

答案 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特征