programing

groovy에서 함수 반환에서 여러 매개 변수를받는 방법

nasanasas 2021. 1. 10. 17:25
반응형

groovy에서 함수 반환에서 여러 매개 변수를받는 방법


groovy로 작성된 함수에서 여러 값을 반환하고 받고 싶지만 오류가 발생합니다.

값이 '[a, b]'인 org.codehaus.groovy.ast.expr.ListExpression 클래스는 할당 연산자의 왼쪽으로 잘못된 표현식입니다.

내 코드는

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

거의 가지고 있습니다. 개념적으로는 [ 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' ]
}

반환 값이 다음과 같이 한 줄에 저장되는 변수를 선언하고 할당 할 수 있습니다. 이는 Justin의 답변에 사용 된 구문보다 약간 더 간결한 구문입니다.

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

In your particular case you may not be able to use this because one of the variables passed to f1 is also used to store a return value


When running Groovy in the context of Jenkins pipeline job the above answers do not work (at least on version 2.60.2), but the following does:

node {
    obj = ret2()
    fw = obj[0]
    lw = obj[1]
    echo "fw=${fw}"
    echo "lw=${lw}"
}

def ret2()
{
    return [5, 7]
}

Or alternatively:

node {
    obj = ret2()
    fw = obj.a
    lw = obj.b
    echo "fw=${fw}"
    echo "lw=${lw}"
}

def ret2()
{
    return [a:5, b:7]
}

ReferenceURL : https://stackoverflow.com/questions/6757539/how-to-accept-multiple-parameters-from-returning-function-in-groovy

반응형