Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 如何避免外部范围值与使用MarkupBuilder相混淆?_Groovy_Gradle - Fatal编程技术网

Groovy 如何避免外部范围值与使用MarkupBuilder相混淆?

Groovy 如何避免外部范围值与使用MarkupBuilder相混淆?,groovy,gradle,Groovy,Gradle,在xml中我需要一个名为file的元素,但是gradle项目有一个名为file的属性,该属性被调用。最好的解决办法是什么 import groovy.xml.MarkupBuilder task test { def writer = new StringWriter() def xml = new MarkupBuilder(writer) xml.elem1(test: 'fest') { elem2(a: 'b') file(c: 'd') elem4

在xml中我需要一个名为file的元素,但是gradle项目有一个名为file的属性,该属性被调用。最好的解决办法是什么

import groovy.xml.MarkupBuilder

task test {
  def writer = new StringWriter()
  def xml = new MarkupBuilder(writer)
  xml.elem1(test: 'fest') {
    elem2(a: 'b')
    file(c: 'd')
    elem4(e: 'f')
  }
  println(writer)
}

您应该能够做到:

xml.file( c: 'd' )

您应该能够使用“delegate”变量,该变量在每个XML元素的代码块中自动可用

例如:

import groovy.xml.MarkupBuilder

task test {
  def writer = new StringWriter()
  def xml = new MarkupBuilder(writer)
  xml.elem1(test: 'fest') {
    elem2(a: 'b')
    delegate.file(c: 'd')
    elem4(e: 'f')
  }
  println(writer)
}

谢谢嗯,我不能决定它是否合乎逻辑;也许两者都有。我想这说明了一点实现。不知何故,我认为它生成了一个要调用的对象树,但它似乎只是其中一个,而当前闭包的状态决定了将其放置在何处,由于它是
xml
变量中的
MarkupBuilder
实例,因此我将其作为thoredge可能喜欢也可能不喜欢的替代语法提供。