簡體   English   中英

如何將計算的對象從主類構造函數傳遞給超類型構造函數?

[英]How should I pass a computed object from the primary class constructor to the supertype constructor?

我正在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的樹,應該如何構建?

我有些尷尬地向后報告:

缺少的代碼是

v.name

這是在准引號中調用時必須折疊到超級構造函數中的必需元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM