Cake模式,self:UserRepository Component =>

时间:2013-01-08 00:19:38

标签: scala self-type cake-pattern

我正在尝试了解蛋糕模式。

我找到了这个要点: https://gist.github.com/2127745

但我不明白这种语法:

// Explicit dependency on User Repository
self: UserRepositoryComponent =>

有人可以解释一下吗?

3 个答案:

答案 0 :(得分:4)

这就是所谓的自我类型注释。这意味着您可以假设该类的对象具有声明的类型(在本例中为UserRepositoryComponent,或某个子类型),并且(作为奖励)允许您将该级别的“this”对象称为“self” ,或您指定的任何其他名称。自我类型注释非常强大。它表达了对类的任何实现的要求(Scala的早期版本在语法上表示为“需要UserRepositoryComponent”),但实际上并不暗示公开可见的类型约束(如果您说“扩展UserRepositoryComponent”,则会发生这种情况)。实现要求在带注释的类的任何实例化中强制执行,但不在其他地方。自我类型注释是“蛋糕模式”的关键,“蛋糕模式”是程序模块的编码,如Scala对象。

答案 1 :(得分:2)

它是一种自我类型注释,例如here解释。如果给出了自我类型,则将其作为特征内部的类型。它允许Trait RealUserServiceComponent通过self:UserRepositoryComment声明说它只能应用于扩展UserRepositoryComment特征的类。

答案 2 :(得分:1)

这是自我类型的注释。它是可以扩展您的类型的规范。像'延伸',但在对立方向。知道所有子类型都是UserRepositoryComponent的一些实现,可以为您提供额外的奖励。也就是说,您可以将它们的所有方法称为您自己的方法。