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

Cha*_*ton 15 polymorphism inheritance scala strong-typing subtype

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

Dav*_*ith 22

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

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

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

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

  • 将结构类型描述为"基于值的特征"而不是"行为[值]"可能更准确,因为从类型系统的角度来看,行为是不透明的属性. (3认同)
  • 我想念你的列表中的"支持更高级的kinded类型",这是Scala最强大的功能之一.我认为最好的参考仍然是Adrian Moors的论文:http://people.cs.kuleuven.be/~adriaan.moors/files/higher.pdf (2认同)