как принять несколько параметров из возвращаемой функции в 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 51

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]
}