【发布时间】:2021-01-03 15:21:49
【问题描述】:
准备在编程 scala 第 2 版中了解复合类型,留下的问题多于答案。
当您声明一个组合了多种类型的实例时,您会得到一个复合类型:
trait T1
trait T2
class C
val c = new C with T1 with T2 // c's type: C with T1 with T2
在这种情况下,c 的类型是C with T1 with T2。这是声明扩展C 并混合T1 和T2 的类型的替代方法。请注意,c 被视为所有三种类型的子类型:
val t1: T1 = c
val t2: T2 = c
val c2: C = c
想到的问题是,为什么要替代?如果你向一种语言添加一些东西,它应该会增加一些价值,否则它是无用的。因此,复合类型的附加值是什么?它与 mixins 相比如何,即 extend ... with ...
【问题讨论】:
-
是一样的。在第一种情况下,编译器将生成扩展所有特征的匿名类。或者,您可以自己生成类
标签: scala inheritance types mixins compound-type