2010-08-29 31 views

回答

22

用于Scala中实现静态辨认的多态性的基本工具是

  • 亚型(沼泽标准OO多态性)
  • 类型参数(允许多态性方差和约束)
  • 自分型(允许OO多态性的限制和专门化)
  • 隐式转换(允许事后多态构造)
  • 结构分型(允许聚根据特征,而不是类型态射)
  • 普通型边界(允许在允许的多态性极其精确的约束)
  • 模式匹配(允许基于数据结构中,类似于抽象数据类型)
  • 高等kinded类型多态性(允许多态性结构的多态性)

调用所有这些'替代品'可能是错误的词,因为它们很好地结合在一起。通过结合使用这些工具中的一些来表达一些多态算法并不罕见。

也值得注意的是在Scala多态中的理解的地方。对于理解,似乎并不特别多态。在表面之下,for-comprehensions只是调用filter/map/flatMap的语法糖,而这些方法的实现往往是高度多态的。因此,看起来相对简单的for-loops可能会导致一些非常令人印象深刻的多态效应。

+3

将结构类型描述为“基于值的特征”而不是“值的行为”可能更准确,因为从类型系统的角度来看,行为是一个不透明的属性。 – 2010-08-29 21:17:41

+2

我错过了“支持更高级别的类型”列表,这是Scala最强大的功能之一。我认为最好的参考依然是阿德里安·摩斯的论文:http://people.cs.kuleuven.be/~adriaan.moors/files/higher.pdf – Landei 2010-08-29 21:39:33

+1

优秀的评论。编辑。 – 2010-08-29 22:49:06