我有一个返回地图的方法。
我想将变量分配给从方法返回的映射中的特定值...
[myA:a, myB:b] = myMethodWhichReturnsAMap()
print myA;
print myB;
因此地图会返回一个包含a和b的地图。我想在一个语句中分配myA和myB。这可能吗?
答案 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