我试图更好地理解 groovy 并遇到了这种用法。
在使用 Http-Builder 时发现了这一点,尽管我的问题与此无关——我主要感兴趣的是为隐含的一般用例找到“groovy-way”。
有一个现有的“请求”方法接受一个闭包,当 http-builder 调用该闭包时,它会传递一个参数,即“请求”。将其他信息传递给此类闭包的最佳方法是什么?
正常使用后,代码可能类似于:
myHttpClient.request(POST) { req ->
uri.path = 'some path'
uri.query = [ p1:'value1', p2:'value2' ]
....
}
在此示例中,我希望能够动态设置(或传入)三个值 - 路径和查询参数 1 和 2 的值。
我没有足够的知识知道正确的方法,但是做了这样的事情:
编辑清理代码
def myPath = '/a/b/c'
def p1Param = 'p1Value'
def p2Param = 'p2Value'
def myClosure = { req ->
uri.path = myPath
uri.query = [ p1:p1Param, p2:p2Param ]
....
}
// first call:
myHttpClient.request(POST, myClosure)
// later on:
myPath = '/new/path'
p1Param = 'newValue1'
p2Param = 'newValue2'
myHttpClient.request(POST, myClosure)
虽然这可行并且很干燥,但它也很丑陋,我认为/希望有更好的方法。我还考虑过将整个调用放入自己的闭包中并简单地调用它——我再次希望有更好的方法!