这可能不是最正确的术语,但我所说的装箱类型是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中找到有关类型级别元编程的说明。
发布于 2012-08-23 23:21:53
我只能想象两种情况。要么你使用类型参数,然后如果你使用这种更高级的类型,例如作为方法的参数,你将在方法泛型中复制它的类型参数:
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 }...or一般
def doSomething(x: Box#E) { ... }所以我认为你需要根据你真正想要实现的目标来重写你的问题。
https://stackoverflow.com/questions/12094049
复制相似问题