在解释器中获取类型和类标记/绑定参数化类型

时间:2013-02-03 22:39:50

标签: scala reflection interpreter type-erasure scala-2.10

给定参数化类型:

trait Document[S]

我想为嵌入式解释器绑定一个这样的实例,例如

def test[S](doc: Document[S]) = tools.nsc.interpreter.NamedParam("document", doc)

这需要TypeTagClassTag Document[S]。请注意,我需要能够绑定完整类型,即Document[S]而不只是Document[_]

我该怎么做?我想我会在文档中添加一些内容,例如

trait Document[S] {
   def tt: reflect.runtime.universe.TypeTag[Document[S]] = ???
   def ct: reflect.runtime.universe.ClassTag[Document[S]] = ???
}

(为什么我需要两个不同的标签来获取命名参数?)


编辑:以下内容使其编译

trait Document[S] {
  implicit def systemType: reflect.runtime.universe.TypeTag[S]
}

def test[S](doc: Document[S]) = {
  import doc.systemType
  tools.nsc.interpreter.NamedParam("document", doc)
}

但我仍然在解释器中绑定到Document[_],所以Document的类型参数丢失了?!

0 个答案:

没有答案