我有一个返回映射的方法。
我想把变量赋值给从方法返回的映射中的特定值…
[myA:a, myB:b] = myMethodWhichReturnsAMap()
print myA;
print myB;
所以映射返回一个包含a和b的映射。我想在一个语句中给myA和myB赋值。这可能吗?
这是不支持的。你可以从一个方法中返回多个值,并在一条语句中将它们赋值给变量,就像这样
def foo() {
[1, 2]
}
def (myA, myB) = foo()
但是返回多个值的函数必须在List
中返回它们,它不适用于Map
。
No。Groovy多重赋值目前只适用于集合和数组。您可以尝试从映射中获取每个值(使用.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