我正在尝试制作一个提供更新案例类的类型提供程序。
我如何拼接类型和默认值(或省略默认值)?
def impl(c: Context)(annottees: c.Expr[Any]*): c.Expr[Any] = {
import c.universe._
import Flag._
val result = {
annottees.map(_.tree).toList match {
case q"$mods class $name[..$tparams](..$first)(...$rest) extends ..$parents { $self => ..$body }" :: Nil =>
val valType = //TODO
val valDefault = //TODO
val helloVal = q"""val x: $valType = $valDefault"""
q"$mods class $name[..$tparams](..$first, $helloVal)(...$rest) extends ..$parents { $self => ..$body }"
}
}
c.Expr[Any](result)
}
我试过了:
我试过val valType = q"String"
了,但是我得到一个错误,好像没有找到默认值:not enough arguments for method apply
我也尝试在定义为的 val 中进行拼接typeOf[String]
,并且我也尝试将ValDef
s 的列表拼接到我的q"$mods class...
(就像我q"def...
在本网站上的一些类似问题中看到的那样),但在每种情况下都有一个打字机错误。
有小费吗?非常感谢您的关注。