问题描述
在scala第二版编程中读到复合类型,剩下的问题多于答案。
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
浮现在脑海中的问题是,为什么要选择替代品?如果您在语言中添加一些内容,那么它应该会增加一些价值,否则就没有用了。因此,化合物类型的附加值是什么?它与混合蛋白的比较如何,即使用...
扩展...解决方法
Mixin和化合物类型是不同的概念
https://docs.scala-lang.org/tour/mixin-class-composition.html
vs。
https://docs.scala-lang.org/tour/compound-types.html
杂种是特质
trait T1
trait T2
class C
class D extends C with T1 with T2
val c = new D
部分情况是使用匿名类代替D
trait T1
trait T2
class C
val c = new C with T1 with T2 // (*)
化合物类型是类型
type T = Int with String with A with B with C
(*)中c
的类型是复合类型。
mixin的概念来自类,继承,OOP等世界。复合类型的概念来自类型,子类型,类型系统,类型理论等世界。
“在Scala中编程”的作者表示有另一种选择:
-
要么介绍
D
(然后
D
扩展了两个混合,即T1
和T2
,c
的类型为D
) -
还是不
(要使用匿名类代替
D
,c
的类型是复合类型)。