Éditeur PHP Apple vous présentera comment exposer les membres de tranche avec immuabilité. En programmation, le découpage fait référence à l'opération d'interception d'une partie d'éléments ou de caractères d'un tableau ou d'une chaîne. Normalement, une opération de découpage renvoie un nouveau tableau ou une nouvelle chaîne, mais parfois nous souhaitons conserver le tableau ou la chaîne d'origine inchangé et exposer uniquement certains membres de la tranche. Cela peut améliorer les performances et l'utilisation de la mémoire de votre programme. Ensuite, nous détaillerons comment y parvenir.
J'ai une structure avec un membre de tranche et une méthode qui expose cette tranche. Mais je ne veux pas que l'appelant puisse modifier le contenu de la tranche. Si je le fais :
type a struct { slice []int } func (a *a) list() []int { return a.slice }
Ce n'est pas sécurisé car le contenu peut être facilement modifié :
a := a{[]int{1, 2, 3}} _ = append(a.list()[:2], 4) fmt.println(a.list()) // [1 2 4]
Je peux évidemment faire en sorte que list()
renvoie une copie de la tranche pour éviter cela :
func (a *A) list() []int { return append([]int{}, a.slice...) }
Une fois que vous avez fourni la tranche à un appelant externe en la renvoyant, vous pouvez la modifier. Si la copie n'est pas acceptée pour des raisons de performances, vous pouvez implémenter le visiteur :
func (a *a) visit(f func(int)) { for _, v := range a.slice { f(v) } }
Cela n'expose pas du tout la tranche et permet au code client d'afficher tous les éléments de la tranche en même temps. Si les éléments ne sont pas des pointeurs ou d'autres types mutables, ils sont effectivement en lecture seule car le rappel du visiteur recevra une copie de la valeur.
Si vous souhaitez arrêter l'itération plus tôt, le visiteur peut renvoyer une valeur booléenne (facultatif).
func (a *A) Visit(f func(int) bool) { for _, v := range a.slice { if !f(v) { return } } }
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!