Scala特征语法

ran*_*its 6 scala scalatra

我正在查看Scalatra的文档,并注意到一段有趣的代码片段,我还没有看到过:http://www.scalatra.org/2.2/guides/persistence/introduction.html

具体来说,就是这样:

trait DatabaseSessionSupport { this: ScalatraBase =>
  import DatabaseSessionSupport._
Run Code Online (Sandbox Code Playgroud)

除了this: ScalatraBase =>细分之外,这里的一切都很有意义.这有什么意义?它是针对下面的导入还是针对整个特征的?

Ran*_*ulz 5

这被称为"自我类型注释",它要求trait DatabaseSessionSupport在可实例化类中的任何使用必须伴随("混入")类型符合ScalatraBase.我没有看过这个特定的代码,但很可能是使用所谓的"蛋糕模式".

您可以在Stack Overflow,各种博客和Odersky等的经典论文中找到这种概念的许多处理方法.人.标题为" 可扩展的组件抽象".