Странное определение метода (def) в Groovy. Выглядит как объект или функция без имени - PullRequest
0 голосов
/ 01 ноября 2018

Я сталкивался с этим в коде несколько раз и не могу понять, что это за объявление. Кажется, что это просто набор переменных, но передается вместе, как если бы это была какая-то особая переменная или сам объект, содержащий все 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 голосов
/ 01 ноября 2018

Это функция множественного назначения Groovy . Короче говоря - он ожидает набор элементов справа и список переменных в скобках для назначения элементов из списка слева. Например:

def (a, b, c) = [1, 10, 100, 1000]

assert a == 1
assert b == 10
assert c == 100

Это назначение предотвращает выброс IndexOutOfBoundsException, и если число переменных слева больше, чем количество элементов в коллекции справа, то оно просто присваивает значение null, например:

def (a, b, c) = [1, 10]

assert a == 1
assert b == 10
assert c == null
...