Clause
← Toda la documentación

Traducido del original en inglés · 1e3a39c8-dirty · 2026-10-26 · Leer en inglés

Records nativos

Las formas de record de OTP 29 más allá de los records ordinarios de tupla: su representación, operaciones y errores. Los records de tupla están en términos.

OTP 29 marca los records nativos como experimentales. Los datos siguientes provienen de los fuentes fijados de maint-29 (erl_lint, erl_expand_records, v3_core, beam_core_to_ssa, erts/emulator/beam/erl_record.c, utils.c, erl_printf_term.c) y de pruebas en vivo sobre OTP 29.1.1.

Alcance

Las tres formas que van más allá de los records de tupla están implementadas y comparten una única representación:

FormaSintaxis
Record nativo, local-record #r{...}., #r{...}, X#r.f, X#r{...}, patrones, is_record/1,2,3
Cualificado e importado#m:r{...}, X#m:r.f, X#m:r{...}, patrones; -export_record, -import_record
Inferido (anónimo)X#_.f, X#_{...}, patrón #_{...}

El módulo de reflexión records está disponible (reflexión). No disponibles: term_to_binary de records nativos (error:notsup, formato externo de términos) y la actualización de código en caliente.

Representación

Operaciones

M es el módulo actual. Todos los errores tienen la clase error; el contenido de badrecord es el valor causante, salvo en la construcción externa fallida.

OperaciónAceptaFallo
Construcción local #r{...}Siempre (la definición es local)Un campo desconocido o un valor ausente son errores de compilación
Construcción externa #m:r{...} (también #r{...} importado, también #M:r)m:r definido en el lote y exportado{badrecord, {m, r}}; después {badfield, {{m, r}, F}}, {novalue, {{m, r}, F}} (prevalece badfield)
Acceso local X#r.fRecord nativo llamado r (el módulo y el indicador de exportación no se comprueban, como en el runtime de OTP){badrecord, X}; campo ausente {badfield, {{Mod, r}, f}}
Acceso externo X#m:r.fMódulo m, nombre r, exportado{badrecord, X}; {badfield, ...}
Acceso anónimo X#_.fCualquier record nativo (la exportación no se comprueba, como en el runtime de OTP){badrecord, X}; {badfield, ...}
Actualización local X#r{...}Módulo M, nombre r{badrecord, X}; campo desconocido {badfield, ...}
Actualización externa X#m:r{...}Exportado, módulo m, nombre rigual
Actualización anónima X#_{...}Exportado o módulo Migual
Patrón local #r{...}Módulo M, nombre r, todos los campos enumerados presentesno encaja
Patrón externo #m:r{...}Módulo m, nombre r; exportado cuando se enumera un campono encaja
Patrón anónimo #_{...}Cualquier record nativo; exportado o módulo M cuando se enumera un campono encaja

Reglas en tiempo de compilación

Los mensajes siguen a erl_lint:

Reflexión

records responde a partir de la definición capturada por un record:

Impresión y orden

Diferencias que se mantienen

El orden de campos al imprimir, el plegado de ==, la construcción externa de módulos no cargados y las advertencias de records que faltan están registrados en diferencias.