私はdrmacvierのScalaの存在型についてのブログを行っています。それを読んだ後、私はタイプを試していました。rndujaブログで与えられているように、次のようにタイプの平等をチェックしています。T型の種類{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
私がチェックした最初の事は、このでした:私は理解できませんでしたがT forSome{type T}
ある
type_==[Any, T forSome{type T}] // true
任意のタイプによって満たさが、なぜそのタイプ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
私はここで何が欠けていますか?私の推論方法に欠陥がありますか?私は理解できないもの
おそらくリストは共変であり、配列は不変であるからでしょうか? –