2012-08-23 4 views
2

가장 정확한 용어가 아닐 수도 있지만 박스형의 의미는 T의 경우 Box[T]입니다. 따라서 Option[Int]은 박스형 Int입니다.스칼라 유형 '추출'

이러한 유형의 추출 방법은 무엇입니까? 내 순진한 시도 :

//extractor 
type X[Box[E]] = E //doesn't compile. E not found 

//boxed 
type boxed = Option[Int] 

//unboxed 
type parameter = X[boxed] //this is the syntax I would like to achieve 
implicitly[parameter =:= Int] //this should compile 

어떤 방법이 있습니까? Apocalisp 블로그 외에도 Scala에서 유형 수준의 메타 프로그래밍에 대한 지침을 찾는 데 어려움을 겪고 있습니다.

+0

더 높은 종류의 유형 ('박스형'이라고하는 것)이 있지만 유형 매개 변수가없는 유스 케이스는 무엇입니까? 나는 당신의'매개 변수'가 발생하거나 유용 할 어떤 시나리오를 상상할 수 없을까? –

+0

이것은 스칼라 타입 시스템에 대한 탐구 이상의 의미이며 어떤 유스 케이스도 갖고 있지 않다. – edofic

답변

2

나는 두 가지 상황 만 상상할 수 있습니다. 유형 매개 변수를 사용하거나 높은 유형의 유형 (예 : 방법에 인자로, 당신은 그것의 형식 매개 변수는 메소드 제네릭에 복제해야합니다 :

trait Box[E] 

def doSomething[X](b: Box[X]) { ... } // parameter re-stated as `X` 

을하거나 형의 회원이, 당신은 인스턴스마다이를 참조 할 수 있습니다 :

trait Box { type E } 

def doSomething(b: Box) { type X = b.E } 

을 ... 또는 일반적으로

def doSomething(x: Box#E) { ... } 

그래서 나는 당신이 실제로 달성하기를 원하는 관점에서 질문을 다시 써야한다고 생각합니다.

+0

# 1과 # 2의 조합이 트릭을 수행 할 것이다. 감사 – edofic

관련 문제