2013-06-04 2 views
1

TypeRef을 별칭의 원래 형식 (및 형식 매개 변수)에 대한 형식 별칭으로 어떻게 확장합니까? 내가 Option[List[Double]] 참조 유형을 가지고 있고이 경우형식 별칭에 대한 반사

는 :

  • symOption
  • args.headList[Double]이다, 그리고 나는 Double으로 처리를 계속 할 수 있습니다

    case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒ 
    

    를 내가 얻을 유형. 나는 유형 Option[MyType] 및 유형 별칭 type Mytype = List[Double]을 가지고 있고이 경우 유형 별칭으로

:

case myType @ TypeRef(_, sym, args) if myType <:< typeOf[Option[Any]] ⇒ 

내가이 얻을 :

  • symOption
  • 입니다
  • args.head은 어떻게 반사 List[Double]MyType을 확장 할 MyType

입니까? MyTypeList 인 것을 확인할 수 있었지만 중첩 된 유형 매개 변수 Double을 가져올 수 없습니다.


Scaladoc 참고 문헌

TypeRef extractor :

TypeRef(
    pre: Universe.Type, 
    sym: Universe.Symbol, 
    args: List[Universe.Type]) 

답변

4

내가 Typenormalize 방법 당신을 도울 수 있습니다 생각 :

별명을 입력 확장하고 더 높은 종류의 TypeRefs를 PolyTypes로 변환합니다. 유형에 대한 함수도 PolyTypes로 구현됩니다. 예 : (아래 에서, 목록의 유형의 생성자) TypeRef (프리가,리스트()) 폴리 타입 (X, TypeRef (프리, 목록 (X)))

함으로써 대체 인 t 유형을 사용하면 t.map(_.normalize)과 같은 작업을 수행 할 수도 있습니다. 이것은 t뿐만 아니라 t의 정의의 일부인 모든 유형 (예 : 유형 인수)을 정규화합니다. 이렇게 효과적으로 t에서 발생하는 별칭을 제거합니다.

+0

내가 필요한 것. 감사! – Andy