我对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中扩展它 - 我想我在这里错过了一些东西。结构类型的概念对我来说也是新的。
答案 0 :(得分:5)
无法扩展结构类型。它们描述的类型不是层次结构,而是根据它提供的方法。
所以,在你有
的情况下type Core = { def system: ActorSystem }
这意味着任何类型,其中包含一个名为system
的方法,该方法不接受任何参数并返回ActoreSystem
也将是Core
。
然而,Scala中的结构类型在某些方面受到限制。首先,它们不能递归(即,Core
可能出现在Core
的定义中),这使得它们无法用于算术运算符之类的东西。
它们效率也不高,因为它们是通过反射实现的。