0
有一些解释here斯卡拉是什么<<运营商
类型和对象也可以有符号名称;特别是它应该是 提到,对于具有两种类型参数的类型,参数之间可以写入名称 ,以便例如
Int <:< Any
与<:<[Int, Any]
相同。
但是,我还是不太明白。我会很感激,如果有人可以提供一个例子的解释。
有一些解释here斯卡拉是什么<<运营商
类型和对象也可以有符号名称;特别是它应该是 提到,对于具有两种类型参数的类型,参数之间可以写入名称 ,以便例如
Int <:< Any
与<:<[Int, Any]
相同。
但是,我还是不太明白。我会很感激,如果有人可以提供一个例子的解释。
这是在对象Predef
定义的类:
abstract class <:<[-From, +To] extends Function1[From, To]
的
A <:< B
证人即A
是B
一个亚型的实例。
该类名是符号没有特别的后果,它可能已被命名为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
}
从使用现场,编译器只允许我们叫succeeds
如果A <: Int
,否则我们不会将能够获得ev
参数。由于编译器可以基于类型参数From
和To
的的方差推断查找类型的上限,所以隐式查找是有效的。
(当然Int
的是最后的类型,所以我们也可以要求平等A =:= Int
,这只是有一个简单的例子。)
对于初学者来说,这是一个类型,而不是运营商。 –
[Scala标点符号(又名符号和运算符)]可能的重复](http://stackoverflow.com/questions/7888944/scala-punctuation-aka-symbols-and-operators) – emlai
该帖子不讨论'<: ' –