2

这可能不是最正确的术语,但我所说的 boxed type 是指Box[T]type TOption[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 中类型级元编程的说明。

4

1 回答 1

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) { ... }

所以我认为你需要根据你真正想要实现的目标来重写你的问题。

于 2012-08-23T15:21:53.057 回答