考虑以下列表
def days = [ 'monday', 'tuesday']
Run Code Online (Sandbox Code Playgroud)
以及each里面有另一个(子)闭包的闭包
days.each { it ->
println "it = $it (outer closure)" // prints day
def cloz = {
println "it = $it (subclosure)" // prints null, how to print day?
}
cloz()
}
Run Code Online (Sandbox Code Playgroud)
it子闭包无法访问闭包cloz。如何从子闭包中引用外部闭包参数?
有多种方法可以获得您想要的行为。问题是it内部闭包中的隐式变量正在踩踏it外部闭包中的显式参数。
你可以这样做:
def days = [ 'monday', 'tuesday']
days.each { outer ->
println "it = $outer (outer closure)" // prints day
def cloz = { inner ->
println "it = $outer (subclosure)" // prints day
}
cloz()
}
Run Code Online (Sandbox Code Playgroud)
或这个:
def days = [ 'monday', 'tuesday']
days.each { day ->
println "it = $day (outer closure)" // prints day
def cloz = {
println "it = $day (subclosure)" // prints day
}
cloz()
}
Run Code Online (Sandbox Code Playgroud)
等等...
我希望这有帮助。