2016-02-08 16 views
6

se hovalori Golang di ritorno della funzione come argomenti di input per un altro

e non ho:

func doSomething(i int, s string) {...} 

allora posso fare quanto segue con successo:

doSomething(returnIntAndString()) 

Tuttavia , diciamo che voglio aggiungere un altro argomento per fare qualcosa del tipo:

func doSomething(msg string, i int, s string) {...} 

Go si lamenta quando si compila se lo chiamo come:

doSomething("message", returnIntAndString()) 

Con:

main.go:45: multiple-value returnIntAndString() in single-value context 
main.go:45: not enough arguments in call to doSomething() 

C'è un modo per fare questo o devo solo rinunciare e assegnare i valori di ritorno da returnIntAndString ad alcuni riferimenti e passare msg e questi valori come doSomething(msg, code, str)?

+0

Sarebbe utile se hai postato il resto del codice – lucifer

risposta

8

È descritto here in the spec. Richiede la funzione interna per restituire i tipi corretti per tutti gli argomenti. Non è previsto alcun parametro aggiuntivo insieme a una funzione che restituisce più valori.

Come caso particolare, se i valori di ritorno di una funzione o metodo g sono uguali in numero e individualmente assegnabile ai parametri di un'altra funzione o metodo f, allora la chiamata f (g (parameters_of_g)) invoca f dopo aver vincolato i valori di ritorno di g ai parametri di f nell'ordine. La chiamata di f non deve contenere parametri diversi dalla chiamata di g, e g deve avere almeno un valore di ritorno. Se f ha un parametro finale ... , gli vengono assegnati i valori di ritorno di g che rimangono dopo l'assegnazione di parametri regolari.

func Split(s string, pos int) (string, string) { 
    return s[0:pos], s[pos:] 
} 

func Join(s, t string) string { 
    return s + t 
} 

if Join(Split(value, len(value)/2)) != value { 
    log.Panic("test fails") 
} 

Se tali condizioni specifiche non sono soddisfatte, allora avete bisogno di assegnare i valori di ritorno e chiamare la funzione separatamente.

Problemi correlati