2016-08-24 51 views
1

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

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将被重新路由到所创建的映射。

注意with块末尾的it,否则app变量将不包含映射,而是将包含任何闭包返回。

+0

感谢您的回复。不包括这两张地图,'ext.app'包含其他合成地图,我可以在那里放置超过2张地图吗? – Andrew

+1

@AndrewTobilko是的,你可以自由地声明你想要的地图数量,它是一个代码块,这些'versions = [:]'和'dependencies = [:]'实际上是在调用地图中设置属性。 – Will

相关问题