Pular para o conteúdo

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
Playground
// 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.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br