¿可以在他的声明中参考地图属性吗?

时间:2016-02-04 17:06:01

标签: dictionary groovy

例如,可以执行此类操作(此操作失败):

def map = [ property: 1,
            propertyPlusOne: map.property + 1]

当然,这样做是可行的:

def map = [:]
map.property = 1
map.propertyPlusOne = map.property + 1

但声明中的所有内容?

2 个答案:

答案 0 :(得分:2)

您可以使用with声明:

def map = [ : ].with {
    property = 1
    propertyPlusOne = property + 1
    it
}

assert map.propertyPlusOne == 2

虽然像ruby的tap(或@timyates' extension)之类的东西稍微清晰一点:

def map = [ : ].tap {
    property = 1
    propertyPlusOne = property + 1
}

assert map.propertyPlusOne == 2

答案 1 :(得分:1)

一般不会。

您必须先定义并初始化map var,才能设置值:

def map = [ property: 1 ]
map += [ propertyPlusOne: map.property + 1]

我不确定你要做什么,但可能值得检查withDefault()方法。