了解Scala语法特征

时间:2018-10-01 16:41:40

标签: scala

我正在阅读有关scalatest的内容,并且经常遇到这种语法

trait Sample {
  self : FlatSpec =>

}

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

1 个答案:

答案 0 :(得分:5)

它称为self-type。这意味着特征Sample可以访问FlatSpec中的所有成员,但是基于此特征创建任何实例时,您必须mixin(将该实例与FlatSpec实例结合)。如果不提供Sample的实现,则无法创建FlatSpec的实例,因为Sample可能会使用那里的方法。

这看起来有点像继承,但不是。参见this答案

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