我问一个较长的问题 ,但现在看来,这是太多的代码,所以我已经创建了这个问题,把重点放在我面对关于使用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
任何人能解释这个错误? 谢谢。