L'éditeur PHP Xiaoxin partage une technique pratique, c'est-à-dire comment ajouter automatiquement de nouveaux éléments aux paramètres de fonction lorsque la tranche (Slice) grandit. Les tranches sont une structure de données flexible, mais peuvent présenter certains défis lorsqu'elles sont utilisées dans les paramètres de fonction. Cet article présentera une méthode concise pour ajouter automatiquement de nouveaux éléments aux paramètres de fonction à mesure que la tranche grandit en utilisant des paramètres variables (Arguments Variadiques) et l'opérateur de propagation (Opérateur Spread). Cette technique peut améliorer la lisibilité et la maintenabilité du code. Apprenons-le ensemble !
Y a-t-il un moyen d'automatiser cela ?
package main import "fmt" func main() { var a []string a = append(a, "this", "this2", "this3") increaseArguments(a) a = append(a, "this4") increaseArguments(a) } func increaseArguments(b []string) { // I want, when i add new element to slice i want this function act as this // fmt.Println(b[0],b[1], b[2], b[3]) fmt.Println(b[0], b[1], b[2]) }
Existe-t-il un moyen d'ajouter automatiquement b[3] comme argument à fmt.println ?
Veuillez noter que si b
的类型为 []any
,您可以将其作为 fmt.println()
:
fmt.println(b...)
Mais à cause de b
的类型是 []string
, tu ne peux pas.
Mais si vous tranchez b
转换为 []any
, ça marche. Vous pouvez le faire en utilisant cette fonction d'assistance :
func convert[t any](x []t) []any { r := make([]any, len(x)) for i, v := range x { r[i] = v } return r }
Puis :
func increasearguments(b []string) { fmt.println(convert(b)...) }
Cela affichera (essayez-le sur go terrain de jeu) :
this this2 this3 this this2 this3 this4
Remarque : dans convert()
中创建一个新切片不会使该解决方案变慢,因为显式传递值(如 fmt.println(b[0], b[1], b[2])
) crée implicitement une tranche.
Voir les questions associées : Comment transmettre la valeur d'une fonction variadique avec plusieurs valeurs de retour ?
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!