scala中子类型多态性有哪些替代方法?

时间:2010-08-29 19:52:26

标签: inheritance scala polymorphism strong-typing subtype

我很想知道scala中子类型多态性的完整替代方法。

1 个答案:

答案 0 :(得分:22)

在Scala中实现静态可检查多态性的基本工具是

  • 子类型(沼泽标准OO多态性)
  • 类型参数化(允许多态方差和约束)
  • 自我分型(允许对OO多态性进行限制和专业化)
  • 隐式转换(允许事后多态构造)
  • 结构类型(允许基于特征的多态性,而不是类型)
  • 一般类型边界(允许对允许的多态性进行极其精确的约束)
  • 模式匹配(允许基于数据结构的多态,类似于抽象数据类型)
  • 高级类型(允许多态结构的多态性)

调用所有这些“替代品”可能是错误的,因为它们是如此完美地集成在一起。一些多态算法通过结合使用这些工具来表达并不罕见。

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