我有一个工作得很好的闭包,但有时我想获取我在闭包中定义的临时变量的最终值。示例:
def someClosure = {Number input->
def howDoIGetThis = input + 4
return 2 * input
}
def normalWay = someClosure(2)
assert normalWay == 4
def myFantasy = someClosure(2).howDoIGetThis
assert myFantasy == 6
这有可能吗?
最佳答案
您可以将状态存储在闭包的所有者或委托(delegate)中。
def howDoIGetThis
def someClosure = {Number input ->
howDoIGetThis = input + 4
return input * 2
}
def normalWay = someClosure(2)
assert normalWay == 4
someClosure(2)
def myFantasy = howDoIGetThis
assert myFantasy == 6
如果你想控制状态进入哪个对象,你可以重写闭包的委托(delegate)。例如:
def closureState = [:]
def someClosure = {Number input ->
delegate.howDoIGetThis = input + 4
return input * 2
}
someClosure.delegate = closureState
def normalWay = someClosure(2)
assert normalWay == 4
someClosure(2)
def myFantasy = closureState.howDoIGetThis
assert myFantasy == 6
关于Groovy:如何获取 ?private? 的值闭包变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9478784/