通常,我使用<:表示A <:B之类的子类型关系,作为类型参数的一部分或类型成员。在浏览某些内容时,我遇到了这种“ <:<”表示形式。在Predef.scala中找到它,令人惊讶的是,它被定义为抽象类。 Doc说:
A <:< B
的一个实例证明A
是B
的子类型。需要类型为A <:< B
的隐式参数对广义约束A <: B
进行编码。
考虑到两者都代表相同的“子类型”关系(AFAIK),请问一下两者之间到底有什么区别。另外,请提出正确的用法(我的意思是,其中<:<比<:更可取)?
答案 0 :(得分:7)
[A <: B]
声明具有已知属性/限制的类型参数A
:它必须是类型B
(现有类型)或其子类型。
class A // A and B are unrelated
class B
// these both compile
def f1[A <: B]() = ??? // A is the type parameter, not a reference to class A
def f2[B <: A]() = ??? // B is the type parameter, not a reference to class B
[A <:< B]
用于测试现有类型。
class B
class A extends B
// A and B must already exist and have this relationship or this won't compile
implicitly[A <:< B]