在Scala中,有一个类
我不理解的是这个是如何工作的。我知道
<:<
用于证明类型约束。该类来源于Predef.scala
: sealed abstract class <:<[-From, +To] extends (From => To) with Serializable
private[this] final val singleton_<:< = new <:<[Any,Any] { def apply(x: Any): Any = x }
implicit def $conforms[A]: A <:< A = singleton_<:<.asInstanceOf[A <:< A]
它的使用示例可以在TraversableOnce
的toMap
方法中找到:
def toMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U] =
我不理解的是这个是如何工作的。我知道
A <:< B
在语法上等同于类型<:<[A, B]
。但是我不明白编译器如何能够找到该类型的隐式值,仅当A <: B
时才能找到。我假设$conforms
定义中的asInstanceOf
调用以某种方式使这成为可能,但是如何实现的呢?此外,使用抽象类的单例实例是否重要,而不是只使用object
?