2016-02-08 9 views
6

Jeśli mamwartości Golang powrotne z funkcji jako argumenty wejściowe do innego

I mam:

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

Wtedy mogę zrobić następujące powodzeniem:

doSomething(returnIntAndString()) 

jednak Powiedzmy, że chcę dodać inny argument do zrobienia. Coś takiego:

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

Go narzeka podczas kompilacji, jeśli ja to nazywam jak:

doSomething("message", returnIntAndString()) 

Z:

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

Czy istnieje sposób, aby to zrobić, czy mam po prostu zrezygnować i przypisać wartości zwracanych z returnIntAndString do niektórych odniesień i przekazać msg i te wartości, takie jak doSomething(msg, code, str)?

+0

Byłoby pomocne, gdybyś opublikował resztę kodu – lucifer

Odpowiedz

8

To jest opisane here in the spec. Wymaga wewnętrznej funkcji zwracania poprawnych typów dla wszystkich argumentów. Nie ma żadnych dodatków dla dodatkowych parametrów wraz z funkcją, która zwraca wiele wartości.

W szczególnym przypadku, gdy wartości zwracanej przez funkcję lub Metoda G są równa liczbie indywidualnie przypisane do parametrów inną funkcję lub metody F, wywołanie f (g (parameters_of_g)) będzie wywołać f po powiązaniu zwracanych wartości g z parametrami f w kolejności. Wywołanie f nie może zawierać parametrów innych niż wywołanie g, a g musi mieć co najmniej jedną wartość zwracaną. Jeśli f ma końcowy ... parametr, to jest mu przypisywane zwracane wartości g, które pozostają po przydziału zwykłych parametrów.

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") 
} 

Jeśli te szczególne warunki nie są spełnione, wówczas należy przypisać wartości zwracanych i wywołać funkcję oddzielnie.

Powiązane problemy