1

動的に生成された閉鎖

私はグルーヴィーな wslite で SOAP リクエストを書きました:

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

しかし、リストからこのリクエストを動的に作成する方法を知っています。これを変数に抽出しました:

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

しかし、この閉鎖に新しいアイテムを追加する方法がわかりません。簡単な方法はありますか?

4

2 に答える 2

3

Builder クロージャーは通常の 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 に答える