Groovy中的奇怪定义方法(def)。看起来像没有名称的对象或函数

时间:2018-11-01 18:23:11

标签: groovy collections declaration

我在代码中几次遇到了这个问题,无法弄清楚这个声明到底是什么。它似乎只是变量的集合,但是却被传递在一起,就好像它是一个包含所有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)
}

1 个答案:

答案 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