0

我对 scala 很陌生,我正在学习教程: http: //www.cakesolutions.net/teamblogs/2013/08/02/akka-and-spray/

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

ActorSystem 完全实现了 Core trait。但是,我需要实现 Core trait 以满足 CoreActor 的自类型声明。

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

package object core { type Core = { def system: ActorSystem } } 这里,Core 类型是一个结构类型,也就是说 Core 是任何包含 system: ActorSystem 成员的东西。

我不明白这一点——如果我不创建一个特征核心,我就无法在 CoreActors 中扩展它——我想我在这里遗漏了一些东西。结构类型的概念对我来说也是新的。

4

1 回答 1

5

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

所以,如果你有

type Core = { def system: ActorSystem }

这意味着任何具有被调用方法system且不带参数并返回 an 的类型ActoreSystem也将是 a Core

然而,Scala 中的结构类型在某些方面受到限制。一方面,它们不能是递归的(也就是说,Core可能出现在 sideCore的定义中),这使得它们无用,例如,对于算术运算符之类的东西。

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

于 2013-10-25T22:23:52.437 回答