Heim  >  Artikel  >  Backend-Entwicklung  >  Wie wirken sich Slice-Einschränkungen auf die Typerhaltung aus, wenn Slices von Funktionen zurückgegeben werden?

Wie wirken sich Slice-Einschränkungen auf die Typerhaltung aus, wenn Slices von Funktionen zurückgegeben werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-23 15:45:02768Durchsuche

When Returning Slices from Functions, How Do Slice Constraints Affect Type Preservation?

Generische Slice-Argumente vs. Slice-Typ-Einschränkungen

Im experimentellen Slices-Paket von Go akzeptieren zwei Funktionen, „Contains“ und „Grow“, Argumente mit unterschiedlichem Typ Einschränkungen. Contains nimmt den generischen Typ []E an, während Grow seinen Argumenttyp auf ein Slice (~[]E) beschränkt.

Typbeschränkungen

Eine Typbeschränkung, Mit ~ bezeichnet stellt sicher, dass ein Typ einer bestimmten Schnittstelle oder einem bestimmten Regelsatz entspricht. In Grow erzwingt die Einschränkung ~[]E, dass der Argumenttyp letztendlich ein Slice mit Elementtyp E sein muss.

Äquivalente Funktionalität?

Trotz der unterschiedlichen Typbeschränkungen , scheinen die in beiden Funktionen verfügbaren Vorgänge nahezu identisch zu sein. Ein wesentlicher praktischer Unterschied ergibt sich jedoch, wenn Funktionen ein Segment desselben Typs wie das Eingabeargument zurückgeben müssen.

Slices zurückgeben

Beim Zurückgeben eines Segments desselben Typs Als Eingabe ist es wichtig, eine Typbeschränkung wie ~[]E zu verwenden. Dadurch kann die Funktion den benannten Typ des Eingabe-Slice beibehalten.

Betrachten Sie zwei Versionen von Grow():

// Preserves named type
func Grow[S ~[]E, E any](s S, n int) S {...}

// Returns unnamed type
func Grow2[E any](s []E, n int) []E {...}

Wenn Grow() einen benutzerdefinierten Slice-Typ empfängt, kann er zurückkehren ein Slice desselben Typs, während Grow2() immer ein unbenanntes Slice zurückgibt.

Demonstration

type MyInts []int
x := MyInts{1} // Custom slice type
x2 := Grow(x, 10) // Type preserved
x3 := Grow2(x, 10) // Unnamed type

In diesem Beispiel ist x2 ein Slice von Geben Sie MyInts ein, während x3 ein unbenanntes Slice ist.

Fazit

Wenn Sie den benannten Typ eines Eingabe-Slices im Rückgabewert beibehalten müssen, ist dies erforderlich um eine Typbeschränkung wie ~[]E zu verwenden. Andernfalls ist das zurückgegebene Slice immer ein unbenannter Typ.

Das obige ist der detaillierte Inhalt vonWie wirken sich Slice-Einschränkungen auf die Typerhaltung aus, wenn Slices von Funktionen zurückgegeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn