Как принимать несколько параметров из возвращаемой функции в 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]
}
Ответы
Ответ 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
, также используется для хранения возвращаемого значения