Saltar al contenido

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

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br