我在build.gradle
中有一个全局地图(配置是在Groovy上编写的)。
我想知道在地图文字的地图声明中是否可以要求已经存在的密钥(可能,它们还没有存在,我理解)在声明了这些键的地方之后的方式。
ext.app = [
versions: [k1:'v1', k2: 'v2'],
dependencies: [d1:'dep1:$versions.k1', d2:'dep2:$versions.k2']
^^^^^^^^^^^ ^^^^^^^^^^^
]
只是说"我使用键的值来定义一个新键,这可能出现在我的地图中" 。
newKey: map(existingKey)
|
V
newKey: existingValue
试图简单地澄清一下。任何帮助将不胜感激。
答案 0 :(得分:1)
Groovy无法自动引用其地图。 with
可以正常工作:
app = [:].with {
versions = [
k1: 'v1',
k2: 'v2'
]
dependencies = [
d1:"dep1:$versions.k1",
d2:"dep2:$versions.k2"
]
it
}
assert app.dependencies.d1 == "dep1:v1"
assert app.dependencies.d2 == "dep2:v2"
在with
块中,所有方法调用都被委托给调用对象,因此,$versions.k1
将被重新路由到正在创建的地图。
请注意it
块末尾的with
,否则app
变量将不包含地图,而是包含该闭包返回的内容。