使用现有键中的值进行键声明,该键在同一映射初始化之前定义

时间:2016-08-24 12:25:27

标签: dictionary gradle groovy literals

我在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

试图简单地澄清一下。任何帮助将不胜感激。

1 个答案:

答案 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变量将不包含地图,而是包含该闭包返回的内容。