为什么自我类型可以声明类

Xia*_*ong 7 scala

我知道Scala只能混合特性,它对依赖注入和蛋糕模式有意义.我的问题是为什么我仍然可以声明一个需要另一个"类"而不是特性的类.

码:

class C
class D { self : C =>}
Run Code Online (Sandbox Code Playgroud)

这仍然是成功的.我认为它应该编译失败,因为在这一点上新的实例D(C是类不是特征)怎么样.

编辑:

当试图实例化D时:

新的D与C //编译失败C类需要成为混合的特征.

Dza*_*nvu 0

您应该明确地进行如下class D操作:extends C

class C
class D extends C { self: C => }
Run Code Online (Sandbox Code Playgroud)

此外,您可以参考帖子Does a class with a self type of another class make sense? ,清楚地解释了这个问题。