Как передать вычисляемый объект из конструктора первичного класса в конструктор супертипа? - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю в контексте макроса Scala 2.12.

Все поля конструктора обнаруживаются динамически, нет возможности жестко закодировать их внутри квазицитаты.

Желаемый результат (сокращенк минимальному наглядному примеру) такой код:

 case class A2(i: Int) extends A(B(i))

Где B встроен при вызове супер-конструктора.

У меня есть это:

q"case class ${className.toTypeName}(..$fields) extends $superTypeType(..$superConstructorArgs)")

Я надеялся установить $ superConstructorArgs из $ fields следующим образом:

case q"case class $className(..$fields) extends ..$bases { ..$body }" => {
        val superConstructorArgs = B(fields.map{case v:ValDef => ???

Компилятор хочет, чтобы дерево вместо B было вставлено в конструктор супертипа.

Что правильнодерево, чтобы обойти мой B и как оно должно быть построено?

1 Ответ

0 голосов
/ 21 февраля 2019

С некоторым смущением я возвращаюсь для потомков:

Отсутствует код

v.name

Это обязательный элемент, который необходимо сложить обратно в супер-конструктор, так как он вызывается в квази-цитате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...