2013-10-25 23 views
0

我是很新的Scala和我的工作我自己低谷的教程:http://www.cakesolutions.net/teamblogs/2013/08/02/akka-and-spray/结构类型,而不是一个特征

在某些时候它来测试,它告诉人们可以通过创建得到了遗产的要求结构类型:

ActorSystem完全实现了Core特质。但是,我需要 实现Core特性来满足CoreActors的自我类型声明。

我可以定义Core是结构类型,在这种情况下,我不需要担心在这里实现Core。如果你想试试 out,删除特性Core {...}并将其替换为

package object core {type Core = {def system:ActorSystem}} 这里,Core类型是结构类型,其中说Core是 任何包含系统的任何东西:ActorSystem成员。

而我没有得到 - 如果我没有创建特质核心,我不能在CoreActors中扩展它 - 我想我在这里错过了一些东西。结构类型的概念对我来说也是新的。

回答

5

结构类型不能扩展。它们不是以层次结构来描述类型,而是根据它提供的方法来描述类型。

所以,在你有

type Core = { def system: ActorSystem } 

的情况下,这意味着其中有一个叫system方法,该方法不带参数,返回一个ActoreSystem也将是一个Core任何类型。

然而,斯卡拉的结构类型在某些方面受到限制。首先,它们不能递归(也就是说,Core可能出现在Core的定义中),这使得它们无用,例如,算术运算符等。

它们也不高效,因为它们是通过反射来实现的。

+0

这是否意味着'核心'也必须被定义呢? 所以我需要一个特质Core呢?该教程说,我可以用结构类型替换特征。 – DanielKhan

+0

@DanielKhan不,你不需要将'Core'定义为特征。 –

相关问题