как принять несколько параметров из возвращаемой функции в groovy
Я хочу вернуть несколько значений из функции, написанной в groovy, и получить их , но я получаю ошибку
класс org.codehaus.отличный.АСТ.выражение.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]
}
3 ответа:
у тебя почти получается. Концептуально
[ 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' ] }
вы можете объявить и назначить переменные, в которых возвращаемые значения хранятся в одной строке, как это, что является немного более компактным синтаксисом, чем тот, который используется в ответе Джастина:
def (int a, int b) = f1(22)
в вашем конкретном случае вы не сможете использовать это, потому что одна из переменных передается в
f1
также используется для хранения возвращаемого значения
при запуске Groovy в контексте задания конвейера Дженкинса вышеуказанные ответы не работают (по крайней мере, в версии 2.60.2), но следующее:
node { obj = ret2() fw = obj[0] lw = obj[1] echo "fw=${fw}" echo "lw=${lw}" } def ret2() { return [5, 7] }
или же:
node { obj = ret2() fw = obj.a lw = obj.b echo "fw=${fw}" echo "lw=${lw}" } def ret2() { return [a:5, b:7] }