首页 文章

如何在Groovy DSL中访问字符串插值中的变量

提问于
浏览
1

我正在Groovy中构建一个DSL,它应该允许在DSL中使用字符串插值:

def dsl = """
   def projectName = "test"
   project("${projectName}/123") {
      task {

      }
   }
"""

不幸的是,当使用以下代码解释上面的DSL时,Groovy解释器不知道 projectName (并产生一个MissingPropertyException):

class ProjectSpec {
    def name

    void task(closure) {
    }
}
binding.project = { name, closure ->
    def project = new ProjectSpec()
    project.name = name
    def code = closure.rehydrate(project, this, this)
    code.resolveStrategy = Closure.DELEGATE_ONLY
    code()
    project
}
def shell = new GroovyShell(binding)
Script script = shell.parse(dsl)
project = script.run()
println project.name

我怎样才能做到这一点?我想我必须推迟对GString的评估 . 我是否必须使用ASTTransformation?

谢谢,

迈克尔

1 回答

  • 1

    这个错误来自你测试你的dsl的方式 . 您使用三重双引号来定义您的dsl字符串:此处插入变量 . 如果您从文件中读取此变量,您将看到您的代码有效 .

    使用三重简单引用( ''' )定义您的dsl String:它应该可以工作 .

相关问题