Это аннотация самостоятельного типа.
Это означает, что класс Child
должен иметь тип C
, т.е. создает зависимости наследования, которые должны удовлетворяться для данного класса.
Небольшой пример:
scala> trait Baz
defined trait Baz
scala> class Foo {
| self:Baz =>
| }
defined class Foo
scala> val a = new Foo
<console>:9: error: class Foo cannot be instantiated because it does not conform to its self-type Foo with Baz
val a = new Foo
^
scala> val a = new Foo with Baz
a: Foo with Baz = $anon$1@199de181
scala> class Bar extends Foo with Baz
defined class Bar
В этом случае Foo
также должен быть Baz
.
Удовлетворяя этому требованию, можно создать экземпляр Foo
.
Кроме того, при определении нового класса (в данном случае Bar
) также требуется, чтобы он был Baz
.
См:
http://www.scala -lang.org / узел / 124