In Scala, what does
trait A <: b>
mean? Is it just the same as
trait A extends B
?
Edited to add: I'm familiar with the syntax for type parameters, and what <: means in that context. however the above example it would seem to me a is name of trait being declared not type parameter.>
解决方案
Seems to compile to the same thing.
~/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
The spec doesn't explain this in "5.3.3 Traits". But the Syntax Summary does mention this.
TraitDef ::= id [TypeParamClause] TraitTemplateOpt
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
Extends ::= ‘extends’ | ‘<:>
UPDATE It was introduced in r14632. With the compiler option -Xexperimental it marks the trait as abstract, for use with a proposed language feature Virtual Traits. Without -Xexperimental, it is a synonym for 'extends' that is allowed only for traits.