我试图从宏中调用宏,但我做错了。它看起来大约是这样的:
import play.api.libs.json._
import scala.reflect.macros.Context
import language.experimental.macros
object Extension {
def apply[A]: Format[A] = macro applyImpl[A]
def applyImpl[A: c.WeakTypeTag](c: Context): c.Expr[Format[A]] = {
import c.universe._
val aTpeW = c.weakTypeOf[A]
val aClazz = aTpeW.typeSymbol.asClass
if (!aClazz.isSealed) { // fall back to Json.format
val t = reify { Json.format[A] } .tree
return c.Expr[Format[A]](t)
}
???
}
}
换句话说,基于 的类型的某些条件A
,我不想在我的宏中生成树,而是想返回另一个宏的主体(Json.format
)。但不知何故,这在使用宏之前已经被扩展了。当我编译这个时,我得到
[error] .../Extension.scala:47: No unapply function found
[error] val t = reify { Json.format[A] } .tree
[error] ^
这意味着format
已经执行(不应该)。该format
方法定义为
def format[A] = macro JsMacroImpl.formatImpl[A]