Подтвердить что ты не робот

Как принимать несколько параметров из возвращаемой функции в groovy

Я хочу вернуть несколько значений из функции, написанной в groovy, и получить их, но я получаю сообщение об ошибке

class org.codehaus.groovy.ast.expr.ListExpression, с его значением '[a, b] ', является плохим выражением в левой части задания Оператор

Мой код

int a=10
int b=0
println "a is ${a} , b is ${b}"
[a,b]=f1(a)
println "a is NOW ${a} , b is NOW ${b}"

def f1(int x) {   
  return [a*10,a*20]
}
4b9b3361

Ответ 1

У тебя это почти есть. Концептуально [ a, b ] создает список, а ( a, b ) разворачивает один, поэтому вы хотите (a,b)=f1(a) вместо [a,b]=f1(a).

int a=10
int b=0
println "a is ${a} , b is ${b}"
(a,b)=f1(a)
println "a is NOW ${a} , b is NOW ${b}"

def f1(int x) {
    return [x*10,x*20]
}

Другой пример, возвращающий объекты, которые не должны быть одного типа:

final Date foo
final String bar
(foo, bar) = baz()
println foo
println bar

def baz() {
    return [ new Date(0), 'Test' ]
}

Кроме того, вы можете объединить декларацию и назначение:

final def (Date foo, String bar) = baz()
println foo
println bar

def baz() {
    return [ new Date(0), 'Test' ]
}

Ответ 2

Вы можете объявлять и назначать переменные, в которых возвращаемые значения хранятся в одной строке, такой как это, что немного более компактный синтаксис, чем тот, который используется в ответе Джастина:

def (int a, int b) = f1(22)

В вашем конкретном случае вы не сможете использовать это, потому что одна из переменных, переданных в f1, также используется для хранения возвращаемого значения