[英]Scala what is <:< operator
有一些解释这里
类型和对象也可以具有符号名。 特别要指出的是,对于具有两个类型参数的类型,可以在参数之间写入名称,例如
Int <:< Any
与<:<[Int, Any]
。
但是,我还是不太明白。 如果有人可以提供示例解释,我将不胜感激。
这是在对象Predef
定义的类:
abstract class <:<[-From, +To] extends Function1[From, To]
A <:< B
的实例证明A
是B
的子类型。
类名是象征性的,没有特殊的意义,可以将其命名为IsSubType[From, To]
,也可以命名IsSubType[From, To]
From IsSubType To
。
您可以通过Predef.$conforms
获得此类的“证据”实例:
implicit def $conforms[A]: <:<[A, A]
这种情况的用例是您拥有类型A
但您想对子类型B <: A
。 然后,您可以简单地要求以下隐式证据:
trait Foo[A] {
def x: A
// def fails: Int = x * x -- not possible, we don't know that A is an Int
def succeeds(implicit ev: A <:< Int): Int = x * x
}
从使用站点,编译器仅允许我们在A <: Int
调用succeeds
,因为否则我们将无法获得ev
参数。 隐式查找之所以起作用,是因为编译器可以根据类型参数From
和To
量<:<
来推断所需类型的上限。
(当然, Int
是最终类型,因此我们也可以要求相等A =:= Int
,这只是一个简单的示例。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.