我在代码中几次遇到了这个问题,无法弄清楚这个声明到底是什么。它似乎只是变量的集合,但是却被传递在一起,就好像它是一个包含所有3个值的单个变量或对象本身一样。 这到底是什么?
def foo(filename) {
// Below you can find an assignment I don't understand:
def (id, company, type) = roo(filename)
AClass.findByStuff(id, company, type)
}
答案 0 :(得分:1)
这是Groovy的multiple assignment feature。简而言之-它期望在右侧有一个元素集合,并在方括号中包含一个变量列表,以将列表中的元素分配到左侧。例如:
def (a, b, c) = [1, 10, 100, 1000]
assert a == 1
assert b == 10
assert c == 100
此分配可防止抛出IndexOutOfBoundsException
,并且如果左侧的变量数大于右侧的collection中的元素数,则仅分配null
值:
def (a, b, c) = [1, 10]
assert a == 1
assert b == 10
assert c == null