jestem zaznajomiony z normalnych porywające zamknięć jak teGroovy Zamknięcie wyjaśnienie
def printSum = {a,b ->
println a+b
}
printSum(5,7) // 12
Jednak natknąłem kod z SpringWS plugin, że mają czas ciężko zrozumieć:
def withEndpointRequest = { url, payload ->
def writer = new StringWriter()
def request = new MarkupBuilder(writer)
payload.delegate = request
payload.call()
def webServiceTemplate = new WebServiceTemplate()
def response = webServiceTemplate.sendToEndpoint(url, writer.toString())
new XmlSlurper().parseText(response)
}
Rozumiem, że powyżej jest zamknięciem.
To jest używany tak:
def namespace = "http://www.myveryimportantcompany.com/hr/schemas"
def serviceURL = "http://localhost:8080/myapp/services"
def response = withEndpointRequest(serviceURL) {
HolidayRequest(xmlns: namespace) {
Holiday {
StartDate("2006-07-03")
EndDate("2006-07-07")
}
Employee {
Number("42")
FirstName("Russ")
LastName("Miles")
}
}
}
jeśli serviceURL
jest przekazywane w to gdzie jest ładunek?
Czy ktoś może wyjaśnić ten fragment w szczegółach?
to wygląda ładowność jest wstrzykiwany przez wtyczkę z pewnego rodzaju metoda przechwytywania. – moskiteau
Wygląda na to, że rzeczy w nawiasach klamrowych są ładunkiem ("HolidayRequest"). Być może Groovy ma trochę cukru syntaktycznego, który pozwala w ten sposób określić argumenty funkcji?Spróbuj przetestować go, wywołując 'printSum (5) {7}' lub coś podobnego do tego. – rliu