Oto przykład problemu Mam:Go: funkcja varariadic i zbyt wiele argumentów?
package main
import "fmt"
func foo(a int, b ...int) {
fmt.Println(a,b)
}
func main() {
a := 0
aa := 1
b := []int{2,3,4}
foo(a, aa, b...)
}
Gdy uruchomię to pojawia się błąd too many arguments in call to foo
. Sądzę, że mogłem zrozumieć, dlaczego tak się dzieje, ale nie jest dla mnie jasne, jak mogę obejść to bez konieczności tworzenia kopii b
z dodatkowym gniazdem na początku dla aa
(którego wolałbym nie robić, jak ten kod będzie działał dość często i z pewnym opóźnieniem jest b
).
Moje pytanie brzmi: czy robię to źle? A jeśli nie, jaki byłby najskuteczniejszy sposób robienia tego, co próbuję zrobić?
(Nie mogę również zmienić podpisu foo
).
Zmienna "b" wygląda raczej na plasterek niż tablicę. – Eonil
Dobry połów. Zbyt łatwo jest złamać zasadę: "Nie nazwiesz kawałka tablicą!" –
Podczas rozwijania plasterka struktura slice jest oczywiście kopiowana, ale podstawowa tablica nie jest kopiowana. Żeby być dokładnym. – PickBoy