Groovy:如何获取 ?private? 的值闭包变量

标签 groovy scope closures private

我有一个工作得很好的闭包,但有时我想获取我在闭包中定义的临时变量的最终值。示例:

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/

相关文章:

javascript - 基本理解题 : objects scope

java - 无法访问另一个方法的结果

javascript - 需要解释 javascript 中的范围问题

jenkins - 使用另一个 groovy 文件中的类作为 Jenkins 管道脚本中的类型

groovy - Gradle:从分支内部调用错误的 <init> 方法(invokespecial)

javascript 闭包仍然适用

JavaScript for 循环闭包问题

javascript - 打破封闭

java - 在 groovy 中将日期减去 1 或 2

groovy 带引号的函数标识符