将映射分配给方法调用



我有一个返回映射的方法。

我想把变量赋值给从方法返回的映射中的特定值…

[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

最新更新