Argumentos de sectores genéricos: comprensión de la distinción
En Go, la programación genérica introduce parámetros de tipo que permiten que las funciones operen en diferentes tipos. Un área de interés es la distinción entre argumentos de sector restringidos a tipos de sector y argumentos de sector genéricos.
Argumento de sector restringido a tipos de sector
Considere la función sectores.Grow con el primer argumento restringido por ~[]E. Esto significa que el tipo de este argumento debe ser un tipo de segmento con un tipo de elemento de E.
Argumento de segmento genérico
Por el contrario, considere la función slices.Contains con el primer argumento simplemente escrito como []E. Esto permite cualquier tipo de segmento con un tipo de elemento E.
Diferencias prácticas
Al principio, puede parecer que estos dos tipos de argumentos de segmento se comportan de manera similar, ya que Ambos permiten que las funciones accedan a operaciones de corte como agregar y rango. Sin embargo, existe una diferencia sutil pero importante cuando se trata de devolver un segmento.
Devolver un segmento
Si la función requiere devolver un segmento del mismo tipo que el segmento de entrada, debe utilizar un argumento de segmento restringido a los tipos de segmento (~[]E). Esto garantiza que el segmento devuelto tenga el tipo subyacente correcto.
Ejemplo
Comparemos dos implementaciones de Grow(): una usando ~[]E y la otra usando [ ]E.
func Grow[S ~[]E, E any](s S, n int) S {
// ...
}
func Grow2[E any](s []E, n int) []E {
// ...
}
Si pasamos una porción de un tipo personalizado (por ejemplo, []MyInt), Grow() puede devolver un valor de ese mismo tipo. Sin embargo, Grow2() solo puede devolver un tipo de segmento genérico ([]E).
Conclusión
En resumen, si necesita devolver un segmento del mismo type como segmento de entrada, debe utilizar un argumento de segmento restringido a tipos de segmento (~[]E). De lo contrario, usar un argumento de segmento genérico es suficiente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3