【发布时间】:2011-05-29 07:57:25
【问题描述】:
看了 Clojure 1.2 中 Protocols 上的 the interview with Rich Hickey 之后,对 Clojure 知之甚少,我对 Clojure 协议有一些疑问:
- 他们打算在 Scala 中做与Structural Types 相同的事情吗?协议相对于结构类型有什么好处(性能、灵活性、代码清晰度等)?它们是通过反射实现的吗?
- 关于与 Scala 互操作性的问题:在 Scala 中可以使用协议代替结构类型吗?是否可以在 Scala 中扩展它们(如果“扩展”术语可以应用于协议)?
【问题讨论】:
-
关于第一个项目符号,Haskell 中的类型类不是更接近 Scala 中的隐式吗?
-
我的理解是,implicits 和 traits 是 Scala 对 Type Classes 的替代品(尤其是当涉及到现有功能的拉皮条时)。但是使用结构类型(和协议,我假设)可以实现的是将您不能(或不想)更改的现有类型的实例传递给只期望传递的对象具有特殊方法的 API致电:
def call(c:{ def call():Unit }) = c.call() -
结构类型与类型类无关。
-
我没说,它们是相关的。无论如何,现在已经从问题中删除了提及吸引太多注意力的类型类 :)
-
你真的应该看看这个:vimeo.com/11236603。
标签: scala clojure protocols language-design structural-typing