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

j2datikz  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(376)

我在Scala2.12宏环境下工作。
所有的构造函数字段都是动态发现的,没有可能在quasiquote中对它们进行硬编码。
期望的结果(精简到最小的可证明示例)是这样的代码:

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走?它应该怎么建?

siv3szwd

siv3szwd1#

我带着些许尴尬向后人汇报:
缺少的代码是

v.name

这是在quasiquotation中调用时需要折叠回超级构造函数的元素。

相关问题