12 · Orientação a Objetos
Arrays fixos e tamanhos genéricos constantes
Confira o tamanho exato de um pacote e infira esse tamanho em funções reutilizáveis.
Nesta página
Um pacote tem uma quantidade fixa de amostras. Conserve essa quantidade no tipo e infira o tamanho ao chamar uma função reutilizável. O exemplo também guarda uma função e altera uma amostra sem mudar o tamanho do pacote.
Confira o tamanho exato de um pacote e infira esse tamanho em funções reutilizáveis.
17-fixed-arrays.zolo
// Sum a packet whose size is checked at the boundary.
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
}
fn describe<const N: int>(samples: [int; N], label: str = "packet") -> str =
"{label}: {N} samples, sum {sum(samples)}"
let packet: Buffer<3> = Buffer { bytes: [12, 18, 30] }
let tools = .{ describe: describe }
print(tools.describe(packet.bytes))
packet.bytes[0] = 15
print(describe(packet.bytes, "updated"))
O tamanho precisa ser conhecido na compilação. Funções genéricas constantes recebem o tamanho inferido como inteiro imutável; arrays fixos rejeitam operações que alteram seu tamanho. Veja a referência para aritmética estática, valores padrão, imports e adaptadores não suportados.
Veja também