Как объявить пакеты с квазицитатами

Я пытаюсь использовать квази-кавычку для генерации пакета AST. У меня есть строковая переменная, которая перечисляет путь пакета, так что

val pkg = "database.dao"

Когда я использую квази цитату q"package $pkg говорит мне, что мне нужна RefTree вместо. Я пытался искать некоторое время и до сих пор не нашел ответа, чтобы преобразовать строку в RefTree

Как мне это сделать?

1 ответ

Решение

Я нашел ответ на стр. 7 этого слайдшера

Оказывается, мне нужно будет создать свой собственный AST, используя несколько Select()Если я хочу динамически внедрить переменную пакета.

  def selectIdentity(directory: String): Select = {
    val dirs = directory.split('.').reverse
    val lastIndex = dirs.length - 1

    def apply(i: Int = 0) : Select = if (i < lastIndex - 1) {
      Select(apply(i + 1), TermName(dirs(i)))
    } else {
      Select(Ident(TermName(dirs(lastIndex))), TermName(dirs(lastIndex - 1)))
    }

    apply()
  }
Другие вопросы по тегам