如何将计算的对象从主类构造函数传递给超类型构造函数?

时间:2019-02-20 22:58:18

标签: scala macros

我正在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周围绕树的正确类型是什么?应该如何构建?

1 个答案:

答案 0 :(得分:0)

我有些尴尬地向后报告:

缺少的代码是

v.name

这是在准引号中调用时必须折叠到超级构造函数中的必需元素。

相关问题