Scala의 실존 유형에 대해 drmacvier 블로그에 있습니다. 그것을 읽은 후에 나는 유형을 실험하고 있었고 rnduja 블로그에 주어진대로 다음과 같은 방식으로 유형의 평등을 검사하고 있습니다.T 유형의 일부 (유형 T)
type_==[Any, T forSome{type T}] // true
제가 이해할 수 없었다하는 것은 T forSome{type T}
는 모든 종류의 만족하지만 왜 그 형태 Any
임 : I 체크
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
가장 먼저하는 일이이었다. 가정 할 때, 가능한 모든 유형의 공통 조상 인 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가 공변 (covariant)이고 배열이 불변 (invariant)이기 때문에? –