1

动态生成的闭包

我在 groovy wslite 中写了肥皂请求:

def request = {
        envelopeAttributes('xmlns:art': 'http://url')
        body {
            'art:validate' {
                item(itemValue)
            }
        }
    }

它工作正常,但现在我必须将其更改为列表,所以最后它会是这样的:

def request = {
        envelopeAttributes('xmlns:art': 'http://url')
        body {
            'art:validate' {
                item(itemValue)
            item(itemValue2)
            item(itemValue3)
            }
        }
    }

但是知道我如何从 List 动态创建这个请求。我什至把它提取到变量中:

def items = {
                item(itemValue)
            item(itemValue2)
            item(itemValue3)
}

但我不知道如何在这个闭包中添加新项目。有什么简单的方法吗?

4

2 回答 2

3

构建器闭包是普通的 Groovy 代码,所以类似于

def values = [itemValue, itemValue2, itemValue3]
def request = {
    envelopeAttributes('xmlns:art': 'http://url')
    body {
        'art:validate' {
            values.each { item(it) }
        }
    }
}

应该可以正常工作。或者如果你有

def items = {
        item(itemValue)
        item(itemValue2)
        item(itemValue3)
}

那么你可以做

def request = {
    envelopeAttributes('xmlns:art': 'http://url')
    body {
        'art:validate'(items)
    }
}

(将现有的闭包传递给art:validate而不是定义一个新的内联闭包)。

于 2013-11-05T12:13:16.173 回答
2

使用您给定的items闭包,这可能会起作用:

def request = {
    envelopeAttributes('xmlns:art': 'http://url')
    body {
        'art:validate' {
            items.delegate = delegate
            items()
        }
    }
}

如果你需要里面的其他东西art:validate

于 2013-11-05T12:15:51.073 回答