我正在Scala 2.12宏上下文中工作。
所有构造函数字段都是动态发现的,没有可能在准引用内对其进行硬编码。
所需的结果(简化为最小的可证明示例)是这样的代码:
case class A2(i: Int) extends A(B(i))
在超级构造函数的调用中,B是内联构造的。
我有这个:
q"case class ${className.toTypeName}(..$fields) extends $superTypeType(..$superConstructorArgs)")
我希望以此方式从$ fields建立$ superConstructorArgs:
case q"case class $className(..$fields) extends ..$bases { ..$body }" => {
val superConstructorArgs = B(fields.map{case v:ValDef => ???
编译器希望将树而不是B插入超类型构造函数中。
能在我的B周围绕树的正确类型是什么?应该如何构建?
答案 0 :(得分:0)
我有些尴尬地向后报告:
缺少的代码是
v.name
这是在准引号中调用时必须折叠到超级构造函数中的必需元素。