我正在通過drmacvier博客瞭解Scala中的存在類型。閱讀完後,我正在試驗類型,我正在按照以下方式檢查類型的相等性,如rnduja博客中所述。T的類型forSome {type T}
def implicitly[A](implicit a: A) = a
// To check equality of two types
class =:=[A, B]
implicit def equalTypeInstance[A] = new =:=[A, A]
def type_==[A, B](implicit ev: A =:= B = null) = ev != null
// To check subtype relation between two types
class <:<[-A, +B]
implicit def subTypeInstance[A] = new <:<[A, A]
def type_<[A, B](implicit ev: A <:< B = null) = ev != null
我檢查的第一件事情是這樣的:
type_==[Any, T forSome{type T}] // true
什麼我不明白是T forSome{type T}
是任何類型的滿意,但爲什麼它的類型Any
。假設,因爲Any
是所有可能類型的共同祖先,所以它們是平等的。用我能夠推理的類似方式。
type_==[Array[Any], Array[T forSome{type T}]] // true
type_==[List[Any], List[T forSome{type T}]] // true
我不能以相同的推理得到這個權利。
type_==[Array[Any], (Array[T] forSome{type T})] // false
type_==[List[Any], (List[T] forSome{type T})] // true
我在這裏錯過了什麼?我的推理方式有缺陷嗎?
大概是因爲List是協變的而且數組是不變的? –