2011-07-20 10 views
46

chcę zwracać wiele wartości z funkcji napisane w Groovy i otrzymać je, ale otrzymuję błądjak przyjmować wiele parametrów z funkcją powracającego w Groovy

klasy org.codehaus.groovy.ast. expr.ListExpression, z wartości '[a, b]' jest zły, jak ekspresja z lewej strony przypisania operatora

My kod jest

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

Pomocna link na jak zwracać wiele wartości dla różnych języków programowania https : //rosettacode.org/wiki/Return_multiple_values#Groovy –

Odpowiedz

77

Prawie go masz. Koncepcyjnie [ a, b ] tworzy listę, a (a, b) rozpakowuje jedną, więc chcesz (a,b)=f1(a) zamiast [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] 
} 

Inny przykład powracającego obiektów, które nie muszą być tego samego typu:

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

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

Dodatkowo można połączyć się z deklaracji i przypisania:

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

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

Dzięki. Rozumiem. –

+0

Dodano linię do odpowiedzi, aby podświetlić zmianę wymaganego OP, ponieważ można łatwo ominąć różne nawiasy w 8 liniach kodu. – ArtB

+0

Jeśli typem zwracanym są obiekty, co się stanie? Czy ktoś może wyjaśnić proszę. Chcę zwrócić wiele obiektów z metody. –

34

można zadeklarować i przypisać zmienne, w których wartości zwracane są przechowywane w jednym wierszu, tak jak to, co jest nieco bardziej zwartą składnią niż ta zastosowana w odpowiedzi Justina:

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

W danym przypadku może nie być w stanie korzystać z tego powodu jedna ze zmiennych przekazanych do f1 jest także używany do przechowywania wartości zwracanej

+0

Według [Groovy Goodness] (http://mrhaki.blogspot.de/2009/09/groovy-goodness-multiple-assignments.html) nie potrzebujesz nawet deklaracji "int" w nawiasach. – sschuberth

Powiązane problemy