在scala宏中推断一种树的类型

edo*_*fic 4 macros scala scala-macros

在宏内部,我如何要求编译器推断构造树的类型?我只找到Context.typeCheck,但它只检查类型但不返回结果.

Tra*_*own 8

如果您对树进行了类型检查,则可以使用其tpe方法:

scala> def impl(c: Context) = c.literal(c.typeCheck(c parse "1+1").tpe.toString)
impl: (c: scala.reflect.macros.Context)c.Expr[String]

scala> def mac = macro impl
mac: String

scala> println(mac)
Int(2)
Run Code Online (Sandbox Code Playgroud)

当然,你可以将它包装在一个表达式中,但是如果你只是想要这个类型就没有必要了.