Guía 24 de 53
Arrays fijos y tamaños genéricos constantes
Compruebe el tamaño exacto de un paquete e infiéralo en funciones reutilizables.
En esta página
Un array fijo registra su tamaño en el tipo. Use esta forma cuando un paquete, una coordenada o un lote debe contener una cantidad exacta de elementos.
struct Buffer<const N: int> {
bytes: [int; N]
}
fn sum<const N: int>(samples: [int; N]) -> int {
let total = 0
for sample in samples {
total += sample
}
total
}
let packet: Buffer<3> = Buffer { bytes: [12, 18, 30] }
print(sum(packet.bytes))El compilador comprueba que el literal contiene tres enteros. La función infiere el tamaño a partir del argumento. Dentro de una función genérica constante, N es un entero inmutable y puede usarse como tamaño del array. Una referencia de función inferida o guardada en un campo conserva el contrato. Los argumentos predeterminados se rellenan antes de que el compilador suministre el tamaño.
Tamaños conocidos durante la compilación¶
Los tamaños aceptan literales enteros no negativos y constantes enteras del módulo. La aritmética sigue las reglas de Zolo: 2 + 1, 7 ~/ 2 y -1 % 3 producen 3, 3 y 2. El operador / produce float y no define un tamaño entero. Overflow, división por cero, variables de ejecución y expresiones simbólicas como N + 1 generan un diagnóstico.
Operaciones admitidas¶
Los arrays fijos admiten lectura, iteración y operaciones que conservan el tamaño. Para sustituir un elemento, el índice debe ser un entero conocido dentro de los límites.
let point: [int; 2] = [4, 7]
point[0] = 5
print(point[1])Un array fijo no puede perder la comprobación de tamaño mediante una anotación, cast, adaptación de función o parámetro genérico sin restricción. Al pasarlo a una función auxiliar, escriba un parámetro [T; N].
Construcción y límites actuales¶
Los campos con tamaño concreto y valor predeterminado reciben elementos nuevos en cada construcción. Un tipo nominal genérico constante necesita campos explícitos o una fábrica que reciba el array fijo. Default automático y los valores predeterminados de campos aún no transportan ese tamaño. Los parámetros constantes deben aparecer en la estructura del tipo; no se admite una identidad nominal basada únicamente en un parámetro sin uso.
En impl Buffer<N>, el tamaño está disponible en anotaciones. Para usarlo como valor de ejecución o reenviarlo a otra función genérica constante, declare un parámetro constante en la función. Las funciones genéricas constantes rechazan argumentos variádicos, @inline escrito en el código y parámetros que ocultan el nombre del tamaño. La reificación se aplica a parámetros de tipo, no a parámetros enteros constantes.
La representación usa el array existente y conserva la prueba de tamaño en el frontend. Los schemas comprueban los tipos de los elementos y el tamaño exacto. Los adaptadores ABI extranjeros y el parser de CLI @arg informan de que los arrays fijos aún no están admitidos.
DOCS / OPINIÓN
¿Esta página dejó alguna pregunta?
Cuéntanos dónde te perdió la explicación. La documentación también forma parte de la experiencia del lenguaje.