我问了一个更长的问题,但似乎代码太多,人们无法整理,所以我创建了这个问题,专注于我在 Scala 中使用宏时面临的一个更小、更具体的问题。
考虑以下代码片段:
val tpe = weakTypeOf[T]
val companion = tpe.typeSymbol.companionSymbol
val fields = tpe.declarations.collectFirst {
case m: MethodSymbol if m.isPrimaryConstructor => m
}.get.paramss.head
val toMapParams = fields.map { field =>
val name = field.name
val decoded = name.decoded
q"$decoded -> t.$name"
}
请注意,这fields
只是此代码中案例类的主要构造函数的参数列表。我感到困惑的是 quasiquote 的结果q"$decoded -> t.$name"
。这到底是什么意思?它应该有什么类型?我收到一个编译错误,说明如下:
Multiple markers at this line
- Implicit conversions found: q"$decoded -> t.$name" => Quasiquote(q"$decoded -> t.
$name")
- type mismatch; found : field.NameType required: c.universe.TermName
- type mismatch; found : field.NameType required: c.universe.TermName
谁能解释这个错误?谢谢。