如何将字符串变量传递给scala反射类型检查quasiquote?

时间:2017-01-25 16:14:19

标签: scala

我尝试根据从反射api中获取的泛型类型来解析类的完整路径。 对于List [Int]的实例,我只有" Int"串。这是工作示例

val toolBox=universe.runtimeMirror(getClass.getClassLoader).mkToolBox()
toolBox.typecheck(q"??? : Int").tpe.typeSymbol.fullName 

全名是假设的java.lang.Int。

但是传递后的变量形式为quasiQuote 全名总是java.langString,无论t变量下是什么。 我想$ {t}被解析为String类型的表达式。

val t = "Int"
toolBox.typecheck(q"??? : ${t}").tpe.typeSymbol.fullName

感谢您的帮助, 克里斯

1 个答案:

答案 0 :(得分:0)

如果要将类型名称拼接为quasiquote,那应该是TypeName,而不是String

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox

scala> val toolBox = runtimeMirror(getClass.getClassLoader).mkToolBox()
toolBox: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl@42c2120c

scala> val t = "Int"
t: String = Int

scala> toolBox.typecheck(q"??? : ${TypeName(t)}").tpe.typeSymbol.fullName
res0: String = scala.Int