有没有办法在地图中使用分配给上一个键的值,例如:
def x = [
a: someList.sum(),
b: anotherList.sum(),
c: someList.sum() / anotherList.sum()
]
Run Code Online (Sandbox Code Playgroud)
我希望'c'的值为a/b,所以有一个快捷方式,这样我就不必在计算'c'时重新计算总和
为了使用先前添加的键/值来计算新的键/值,您必须能够控制键/值的添加顺序.我知道这很明显,但可能并不明显的是Groovy Map声明没有考虑到顺序.例如,如果你写这个......
def x = [
a: 8,
b: 2,
c: a / b
]
Run Code Online (Sandbox Code Playgroud)
...,在计算key值的表达式时c,Groovy将尝试访问一个名为的变量或属性a,该变量或属性将失败,因为变量/ property不存在.但是,您可以利用该属性查找并执行以下操作:
def x = [:].with {
a = 8
b = 2
c = a / b
delegate
}
Run Code Online (Sandbox Code Playgroud)
首先创建一个空的Map.然后,with(Closure)用来执行putAt()和get()反对Map.上面的例子相当于......
def x = [:].with {
putAt('a', 8)
putAt('b', 2)
putAt('c', get('a') / get('b'))
delegate
}
Run Code Online (Sandbox Code Playgroud)
最后,返回Map自己以便分配给它x.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |