结构类型而不是特征

时间:2013-10-25 21:51:56

标签: scala

我对scala很陌生,我正在通过教程自我工作:http://www.cakesolutions.net/teamblogs/2013/08/02/akka-and-spray/

在某些时候,它涉及到测试,它告诉我们可以通过创建结构类型来克服继承要求:

  

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

     

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

     

包对象核心{type Core = {def system:ActorSystem}}   这里,Core类型是一种结构类型,它表示Core是   任何包含系统的东西:ActorSystem成员。

我不明白 - 如果我没有创建一个特性核心,我无法在CoreActors中扩展它 - 我想我在这里错过了一些东西。结构类型的概念对我来说也是新的。

1 个答案:

答案 0 :(得分:5)

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

所以,在你有

的情况下
type Core = { def system: ActorSystem }

这意味着任何类型,其中包含一个名为system的方法,该方法不接受任何参数并返回ActoreSystem也将是Core

然而,Scala中的结构类型在某些方面受到限制。首先,它们不能递归(即,Core可能出现在Core的定义中),这使得它们无法用于算术运算符之类的东西。

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