Saltar al contenido

12 · Programación Orientada a Objetos

Conserva los demás campos del record

En { name: str, ..R }, R representa los otros campos de un record anónimo. Una función genérica puede exigir name y conservar los tipos exactos de los otros campos. La row no puede volver a declarar un campo explícito.

En esta página

En { name: str, ..R }, R representa los otros campos de un record anónimo. Una función genérica puede exigir name y conservar los tipos exactos de los otros campos. La row no puede volver a declarar un campo explícito.

Ejemplo completo

Conserva los demás campos del record.

15-record-rows.zolo
Playground
// R carries the exact fields that this function does not mention.

fn rename<R>(user: { name: str, ..R }, name: str) -> { name: str, ..R } =
    user with { name: name }

fn twice<R>(user: { name: str, ..R }) -> { name: str, ..R } =
    rename(rename(user, "first"), "Ada")

let original = .{ name: "Ana", id: 42, active: true, nested: .{ count: 3 } }
let changed = twice(original)
assert(changed.name == "Ada")
assert(changed.id == 42)
assert(changed.active)
assert(changed.nested.count == 3)
assert(original.name == "Ana")

// A stored generic callable retains the same record contract.

let rename_user = rename
let again = rename_user(changed, "Bia")
assert(again.id == 42)
assert(again.nested.count == 3)

// A closed record parameter can select fields from the preserved result.

fn get_id(user: { id: int }) -> int = user.id
assert(get_id(again) == 42)
print("record rows: ok")

Referencia

Referencia · Programa fuente

zolo run examples/features/40-syntax-fourth/15-record-rows.zolo --no-cache

Consulta también

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br