Maison > développement back-end > Golang > Pourquoi ne puis-je pas mélanger des tranches « éclatées » et des paramètres réguliers dans les fonctions variadiques de Go ?

Pourquoi ne puis-je pas mélanger des tranches « éclatées » et des paramètres réguliers dans les fonctions variadiques de Go ?

Susan Sarandon
Libérer: 2024-12-17 19:13:19
original
511 Les gens l'ont consulté

Why Can't I Mix

Mélange de tranches "éclatées" et de paramètres réguliers dans des fonctions variadiques

Go ne permet pas de mélanger des tranches "éclatées" avec des paramètres réguliers dans des fonctions variadiques. Cela est évident dans l'exemple suivant :

func main() {
    stuff := []string{"baz", "bla"}
    foo("bar", stuff...) // Error: too many arguments in call to foo
}

func foo(s ...string) {
    fmt.Println(s)
}
Copier après la connexion

Selon la spécification du langage Go, un argument de longueur variable peut être spécifié de deux manières : en énumérant les éléments ou en utilisant une tranche existante. Le mélange des deux n'est pas autorisé.

Lorsque les éléments sont énumérés, une nouvelle tranche est créée où les éléments deviennent les valeurs du paramètre variadique. Cependant, lorsqu'une tranche existante est utilisée avec ..., aucune nouvelle tranche n'est créée et la tranche d'origine devient le paramètre variadique.

Le passage à la fois d'un seul élément et d'une tranche entraînera une incompatibilité de type, conduisant à une erreur du compilateur. Mélanger les deux options nécessiterait d'allouer une nouvelle tranche, mais Go ne supporte pas ce comportement.

Le message d'erreur "trop ​​d'arguments dans l'appel à foo" indique que le compilateur attend une seule tranche ou une liste d'éléments , mais pas une combinaison des deux. Pour résoudre ce problème, supprimez des éléments... ou énumérez les éléments individuellement.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal