Saltar al contenido

09 · Estructuras de Datos

Caminos de campos tipados

field User::address.city crea un FieldPath<User, str> sin leer una instancia. get lee el campo; set devuelve una actualización inmutable y comparte hijos intactos. Conserva privacidad y tipos exactos; se rechazan miembros calculados y almacenamiento lineal.

En esta página

field User::address.city crea un FieldPath<User, str> sin leer una instancia. get lee el campo; set devuelve una actualización inmutable y comparte hijos intactos. Conserva privacidad y tipos exactos; se rechazan miembros calculados y almacenamiento lineal.

Ejemplo completo

Caminos de campos tipados.

23-typed-field-paths.zolo
Playground
// Item 20: a typed field path can be reused and its getter is a callback.

struct Address { city: str, postal_code: str }
struct User { name: str, address: Address, roles: [str] }

fn city_path() -> FieldPath<User, str> = field User::address.city

fn main() {
    let city = city_path()
    let original = User {
        name: "Ana",
        address: Address { city: "São Paulo", postal_code: "01000-000" },
        roles: ["reader"],
    }
    let moved = city.set(original, "Recife")
    print(city.get(original))
    // expected: São Paulo

    print(city.get(moved))
    // expected: Recife

    print(moved.address.postal_code)
    // expected: 01000-000


    let cities = [original, moved].map(city.get)
    print(cities[0])
    // expected: São Paulo

    print(cities[1])
    // expected: Recife


    // The untouched collection is still shared by the immutable update.

    moved.roles.push("reviewer")
    print(original.roles.len())
    // expected: 2

}

Reglas y comportamiento

Records, maps y actualizaciones · Documentación

Desde un checkout del repositorio:

zolo examples/features/06-data-structures/23-typed-field-paths.zolo

Consulta también

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br