Groovy中的惰性映射值

问题描述 投票:0回答:1

因此,在groovy中,您可以定义一个字符串,每次读取其值时都会延迟检索其值。

System.setProperty('foo', 'bar')

def getMyValue = {
  return System.getProperty('foo')
}

def myData = [
  value1: "${ getMyValue() }",
  vaule2: "${ -> getMyValue() }",
]

System.setProperty('foo', 'bam')
println "${myData}"

System.setProperty('foo', 'baz')
println "${myData}"

运行时会产生收益

[value1:bar, vaule2:bam]
[value1:bar, vaule2:baz]

这对于字符串值来说真的很好]

我想知道是否可以对数字类型进行类似操作

def myData = [
   myInt: { -> Integer.valueOf(System.getProperty('somePropThatIsSetDownStream')) },
]

或者如果有方法可以覆盖地图上的get方法,以便执行get时,我可以执行一个转换myData.myInt值的闭包

def valueTransformer = { key, map ->
    if(map[key] instanceOf Closure) {
      return map[key].call()
    }
    return map[key]
}

也许有一个闭包可以覆盖在调用myData.myInt时发生的逻辑吗?

因此,在groovy中,您可以定义一个字符串,每次读取其值时都会延迟检索其值。 System.setProperty('foo','bar')def getMyValue = {return System.getProperty('foo')} def myData = ...

groovy closures lazy-evaluation
1个回答
1
投票

这取决于您要实现的语法,但是可能有很多解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.