Mélange de tranches "éclatées" et de paramètres réguliers dans des fonctions variadiques
Dans Go, les fonctions variadiques autorisent un nombre arbitraire d'arguments. Cependant, il n'est pas possible de combiner à la fois des éléments énumérés et des tranches existantes lors de la spécification des arguments.
Syntaxe des arguments variadiques
La valeur transmise à un paramètre variadique peut être soit spécifié via :
Mélange d'éléments énumérés et de tranches
Le code suivant ne sera pas compilé :
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) // compile error: too many arguments } func foo(s ...string) {}
C'est parce que Go ne permet pas de mélanger les deux syntaxes. Lors de l'énumération d'éléments individuels, une nouvelle tranche est créée. Lors de l'utilisation d'une tranche existante, la même tranche est utilisée comme paramètre variadique.
Raison de la limitation
La limitation est due à la façon dont Go traite les arguments variadiques. Lors de l'énumération des éléments, une nouvelle tranche est créée pour contenir les valeurs. Cependant, si une tranche existante est transmise, aucune nouvelle tranche n'est créée. Au lieu de cela, la tranche passée est directement affectée au paramètre variadique. Mélanger les deux nécessiterait l’allocation d’une nouvelle tranche, ce qui n’est actuellement pas pris en charge.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!