在Scala中用<:和<:<表示子类型关系

时间:2019-03-14 06:52:38

标签: scala

通常,我使用<:表示A <:B之类的子类型关系,作为类型参数的一部分或类型成员。在浏览某些内容时,我遇到了这种“ <:<”表示形式。在Predef.scala中找到它,令人惊讶的是,它被定义为抽象类。 Doc说:

  

A <:< B的一个实例证明AB的子类型。需要类型为A <:< B的隐式参数对广义约束A <: B进行编码。

考虑到两者都代表相同的“子类型”关系(AFAIK),请问一下两者之间到底有什么区别。另外,请提出正确的用法(我的意思是,其中<:<比<:更可取)?

1 个答案:

答案 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]