如何从 Groovy 中的子闭包引用外部闭包参数

Lib*_*nek 1 groovy

考虑以下列表

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。如何从子闭包中引用外部闭包参数?

Jef*_*own 6

有多种方法可以获得您想要的行为。问题是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)

等等...

我希望这有帮助。