09 · Estruturas de Dados
Atualizações imutáveis aninhadas
A atualização with avalia a base uma vez e copia a raiz e os records alterados no caminho. Filhos intactos continuam compartilhados. O resultado preserva o tipo nominal; caminhos conflitantes e cópias de recursos lineares são rejeitados.
Nesta página
A atualização with avalia a base uma vez e copia a raiz e os records alterados no caminho. Filhos intactos continuam compartilhados. O resultado preserva o tipo nominal; caminhos conflitantes e cópias de recursos lineares são rejeitados.
Exemplo completo
Atualizações imutáveis aninhadas.
20-immutable-record-updates.zolo
// Item 4: copy only the record paths being changed, keeping the same type.
struct Address { city: str, postal_code: str }
struct User { name: str, address: Address, roles: [str] }
fn main() {
let original = User {
name: "João",
address: Address { city: "São Paulo", postal_code: "01000-000" },
roles: ["reader"],
}
let changed = original with { name: "Ana", address.city: "Recife" }
print(original.name)
// expected: João
print(changed.name)
// expected: Ana
print(original.address.city)
// expected: São Paulo
print(changed.address.city)
// expected: Recife
print(changed.address.postal_code)
// expected: 01000-000
// The untouched roles reference is shared, while address was copied.
changed.roles.push("reviewer")
print(original.roles.len())
// expected: 2
let next = changed with { address.postal_code: "50000-000" } with { name: "Beatriz" }
print(next.name)
// expected: Beatriz
}
Regras e comportamento
Records, maps e atualizações · Documentação
A partir de um checkout do repositório:
zolo examples/features/06-data-structures/20-immutable-record-updates.zolo
Veja também