繁体   English   中英

Scala什么是<:<运算符

[英]Scala what is <:< operator

有一些解释这里

类型和对象也可以具有符号名。 特别要指出的是,对于具有两个类型参数的类型,可以在参数之间写入名称,例如Int <:< Any<:<[Int, Any]

但是,我还是不太明白。 如果有人可以提供示例解释,我将不胜感激。

这是在对象Predef定义的类:

abstract class <:<[-From, +To] extends Function1[From, To]

A <:< B的实例证明AB的子类型。

类名是象征性的,没有特殊的意义,可以将其命名为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参数。 隐式查找之所以起作用,是因为编译器可以根据类型参数FromTo<:<来推断所需类型的上限。

(当然, Int是最终类型,因此我们也可以要求相等A =:= Int ,这只是一个简单的示例。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM