scala中的复合型与混合型
准备在scala第二版编程中使用复合类型,留下的问题多于答案 当您声明一个组合了多种类型的实例时,将得到一个复合类型:scala中的复合型与混合型,scala,inheritance,types,mixins,compound-type,Scala,Inheritance,Types,Mixins,Compound Type,准备在scala第二版编程中使用复合类型,留下的问题多于答案 当您声明一个组合了多种类型的实例时,将得到一个复合类型: trait T1 性状T2 C类 val c=新的c和T1以及T2//c的类型:c和T1以及T2 在这种情况下,c的类型是带有T1和T2的c。这是声明扩展了C并混合了T1和T2的类型的替代方法。请注意,c被视为所有三种类型的子类型: val t1:t1=c val t2:t2=c val c2:C=C 我想到的问题是,为什么要选择?如果你给一种语言添加了一些东西,它应该会增
trait T1
性状T2
C类
val c=新的c和T1以及T2//c的类型:c和T1以及T2
在这种情况下,c
的类型是带有T1和T2的c。这是声明扩展了C
并混合了T1
和T2
的类型的替代方法。请注意,c
被视为所有三种类型的子类型:
val t1:t1=c
val t2:t2=c
val c2:C=C
我想到的问题是,为什么要选择?如果你给一种语言添加了一些东西,它应该会增加一些价值,否则它是无用的。因此,复合型的附加值是多少?它与混合剂(即扩展)相比如何。。。对于…混合物和化合物类型是不同的概念:
vs
混合蛋白是一种特性
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
trait T1
trait T2
class C
val c = new C with T1 with T2 // (*)
(然后D
扩展了两个mixin,即T1
和T2
,c
的类型是D
)
- 还是不
(要使用匿名类而不是
D
,c
的类型是复合类型)
这是一样的。在第一种情况下,编译器将生成扩展所有特征的匿名类。或者,您可以在Scala中生成自己的类。这两个世界并不代表二分法,事实上它们与描述前者的后者相交。@AluanHaddad是的,当然这两个世界相交(只是不重合)。它们对应。至少是这样goal@DmytroMitin那么,作者为什么会说这是声明一个扩展了C并在T1和T2中混合的类型的替代方法呢。请注意,c被认为是这三种类型的一个子类型:
这句话就像是在说使用extend with的替代方法mixins@AluanHaddad目标是什么是有争议的。一方面,静态类型的存在是为了在编译时指定运行时行为,并避免动态类型不一致。另一方面,还有类型级编程,其中类型具有独立的意义,目标是在类型级执行计算,根据类型制定业务逻辑。