如何使用Quasiquotes

时间:2015-08-20 08:44:15

标签: scala abstract-syntax-tree scala-macros scala-quasiquotes

我正在尝试使用准引号来生成包AST。我有一个字符串变量,列出了包路径

val pkg = "database.dao"

当我使用准引号 q"package $pkg 时,它告诉我我需要RefTree。我现在尝试搜索一段时间,仍然没有找到将字符串转换为RefTree

的答案

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我在slideshare

的第7页找到了答案

事实证明,如果我想动态注入包变量,我将需要使用多个Select()生成我自己的AST。

  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()
  }