ПРИМЕЧАНИЕ Начиная с Scala 2.12.5, использование <:
для extends
устарело
scala -deprecation -e 'trait B; trait A <: B'
/var/folders/0w/kb0d3rqn4zb9fcc91pxhgn8w0000gn/T/scalacmd2374381600671257557.scala:1: warning: Using `<:` for `extends` is deprecated
trait B; trait A <: B
^
one warning found
Кажется, чтобы скомпилировать то же самое.
~/code/scratch: scala -Xprint:typer -e 'trait B; trait A <: B'
// snip
abstract trait B extends scala.AnyRef;
abstract trait A extends java.lang.Object with this.B
~/code/scratch: scala -Xprint:typer -e 'trait B; trait A extends B'
// snip
abstract trait B extends scala.AnyRef;
abstract trait A extends java.lang.Object with this.B
Спецификация не объясняет это в "5.3.3 Черты". Но в Синтаксической Сводке это упоминается.
TraitDef ::= id [TypeParamClause] TraitTemplateOpt
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
Extends ::= ‘extends’ | ‘<:’
ОБНОВЛЕНИЕ Это было введено в r14632 . С опцией компилятора -Xexperimental
он помечает черту как абстрактную для использования с предложенной функцией языка Виртуальные черты . Без -Xexperimental
это синоним «extends», который разрешен только для черт.