09 · Estructuras de Datos
Actualizaciones inmutables anidadas
La actualización with evalúa la base una vez y copia la raíz y los records modificados del camino. Los hijos intactos siguen compartidos. El resultado conserva su tipo nominal; se rechazan caminos conflictivos y copias de recursos lineales.
En esta página
La actualización with evalúa la base una vez y copia la raíz y los records modificados del camino. Los hijos intactos siguen compartidos. El resultado conserva su tipo nominal; se rechazan caminos conflictivos y copias de recursos lineales.
Ejemplo completo
Actualizaciones inmutables anidadas.
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
}
Reglas y comportamiento
Records, maps y actualizaciones · Documentación
Desde un checkout del repositorio:
zolo examples/features/06-data-structures/20-immutable-record-updates.zolo
Consulta también