了解scala语法特征

Sri*_*vas 0 scala

我正在阅读有关scalatest的内容,而且我很多时候都会遇到这种语法

trait Sample {
  self : FlatSpec =>

}
Run Code Online (Sandbox Code Playgroud)

这是什么意思?请举例说明

Bog*_*nko 5

它被称为自我类型.这意味着trait Sample可以从中访问所有成员FlatSpec,但是当您基于此特征创建任何实例时,您必须mixin(组合)此实例与实例FlatSpec.您无法在Sample不提供实现的情况下创建实例,FlatSpec因为Sample可能会使用那里的方法.

这可能看起来有点像继承,但事实并非如此.看到这个答案

注意:self只是对当前对象的引用而不是语法元素.您可以使用任何单词代替self.