Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala中的复合型与混合型_Scala_Inheritance_Types_Mixins_Compound Type - Fatal编程技术网

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 我想到的问题是,为什么要选择?如果你给一种语言添加了一些东西,它应该会增

准备在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

我想到的问题是,为什么要选择?如果你给一种语言添加了一些东西,它应该会增加一些价值,否则它是无用的。因此,复合型的附加值是多少?它与混合剂(即扩展)相比如何。。。对于…

混合物和化合物类型是不同的概念:

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目标是什么是有争议的。一方面,静态类型的存在是为了在编译时指定运行时行为,并避免动态类型不一致。另一方面,还有类型级编程,其中类型具有独立的意义,目标是在类型级执行计算,根据类型制定业务逻辑。