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
該帖子不討論'<: ' –