更新されたケース クラスを提供する型プロバイダーを作成しようとしています。
タイプとデフォルト値をつなぎ合わせる (またはデフォルト値を省略する) にはどうすればよいですか?
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
my にスプライシングしようとしましたq"$mods class...
(このサイトのいくつかの同様の質問で a に行われたようにq"def...
) が、それぞれの場合にtyperがあります。エラー。
任意のヒント?ご覧いただきありがとうございます。