将映射分配给方法调用

时间:2014-08-22 12:46:59

标签: groovy

我有一个返回地图的方法。

我想将变量分配给从方法返回的映射中的特定值...

[myA:a, myB:b] = myMethodWhichReturnsAMap()
print myA;
print myB;

因此地图会返回一个包含a和b的地图。我想在一个语句中分配myA和myB。这可能吗?

2 个答案:

答案 0 :(得分:3)

AFAIK,不支持此功能。您可以从方法返回多个值,并将它们分配给单个语句中的变量,如

def foo() {
  [1, 2]
}

def (myA, myB) = foo()

但是返回多个值的函数必须在List中返回它们,它不适用于Map

答案 1 :(得分:3)

没有。 Groovy multiple assignment目前仅适用于集合和数组。您可以尝试从地图中获取每个值(使用.values(),这并不关心订购)或使用with从地图中获取密钥:

def fn = { [a: 1, b: 2] }
def (a, b) = fn().with { [a, b] }

assert a == 1
assert b == 2

如果这是一个非常常见的用例,您可能需要添加一些元编程:

def fn = { 
    def m = [a: 1, b: 2]
    m.getMetaClass().getAt = { List keys -> 
        delegate.findAll { it.key in keys }*.value 
    }
    m
}

def (a, b) = fn()['a', 'b']

assert a == 1
assert b == 2