【发布时间】:2019-08-31 17:27:52
【问题描述】:
使用 scala-macros 为案例类生成伴随对象
我尝试了一些代码示例,它可以获取元组列表(名称 -> 类型),但是如何在同一范围内生成对象?
import c.universe._
val tpe = weakTypeOf[T]
val fields = tpe.decls.collectFirst {
case m: MethodSymbol if m.isPrimaryConstructor => m
} .get
.paramLists
.head
val extractParams = fields.map { field =>
val name = field.asTerm.name
val fieldName = name.decodedName.toString
val NullaryMethodType(fieldType) = tpe.decl(name).typeSignature
c.Expr[List[(String, String)]](
q"""
($fieldName, ${fieldType.toString})
"""
)
是否可以注释某些案例类和生成的伴侣在同一范围内可见?
// test case: defined a class with some fields
@GenerateCompanionWithFields
case class SomeCaseClass(i: Int, b: Byte, c: Char)
目标:
SomeCaseClass.i() // returns Int
SomeCaseClass.b() // returns Byte
SomeCaseClass.c() // returns Char
【问题讨论】:
标签: scala scala-macros companion-object scala-2.13