Clause
← Gesamte Dokumentation

Übersetzt aus dem englischen Original · 1e3a39c8-dirty · 2026-10-26 · Auf Englisch lesen

Native Records

Die Record-Formen von OTP 29 jenseits gewöhnlicher Tupel-Records: ihre Darstellung, Operationen und Fehler. Tupel-Records stehen unter Terme.

OTP 29 kennzeichnet native Records als experimentell. Die folgenden Fakten stammen aus den festgelegten maint-29-Quellen (erl_lint, erl_expand_records, v3_core, beam_core_to_ssa, erts/emulator/beam/erl_record.c, utils.c, erl_printf_term.c) und aus Live-Proben mit OTP 29.1.1.

Umfang

Alle drei Formen jenseits der Tupel-Records sind implementiert und teilen eine Darstellung:

FormSyntax
Nativer Record, lokal-record #r{...}., #r{...}, X#r.f, X#r{...}, Muster, is_record/1,2,3
Qualifiziert und importiert#m:r{...}, X#m:r.f, X#m:r{...}, Muster; -export_record, -import_record
Inferiert (anonym)X#_.f, X#_{...}, Muster #_{...}

Das Reflexionsmodul records ist vorhanden (Reflexion). Nicht vorhanden: term_to_binary nativer Records (error:notsup, externes Termformat) und Hot Code Upgrade.

Darstellung

Operationen

M ist das aktuelle Modul. Alle Fehler haben die Klasse error; badrecord-Nutzlasten sind der fehlerhafte Wert, außer bei fehlgeschlagener externer Konstruktion.

OperationAkzeptiertFehlschlag
Lokale Konstruktion #r{...}Immer (Definition ist lokal)Unbekanntes Feld oder fehlender Wert sind Kompilierfehler
Externe Konstruktion #m:r{...} (auch importiertes #r{...}, auch #M:r)m:r im Batch definiert und exportiert{badrecord, {m, r}}; dann {badfield, {{m, r}, F}}, {novalue, {{m, r}, F}} (badfield gewinnt)
Lokaler Zugriff X#r.fNativer Record namens r (Modul und Export-Flag werden nicht geprüft, wie in der Runtime von OTP){badrecord, X}; fehlendes Feld {badfield, {{Mod, r}, f}}
Externer Zugriff X#m:r.fModul m, Name r, exportiert{badrecord, X}; {badfield, ...}
Anonymer Zugriff X#_.fJeder native Record (Export wird nicht geprüft, wie in der Runtime von OTP){badrecord, X}; {badfield, ...}
Lokale Aktualisierung X#r{...}Modul M, Name r{badrecord, X}; unbekanntes Feld {badfield, ...}
Externe Aktualisierung X#m:r{...}Exportiert, Modul m, Name rebenso
Anonyme Aktualisierung X#_{...}Exportiert oder Modul Mebenso
Lokales Muster #r{...}Modul M, Name r, jedes aufgeführte Feld vorhandenkein Match
Externes Muster #m:r{...}Modul m, Name r; exportiert, wenn ein Feld aufgeführt istkein Match
Anonymes Muster #_{...}Jeder native Record; exportiert oder Modul M, wenn ein Feld aufgeführt istkein Match

Regeln zur Compile-Zeit

Die Meldungen folgen erl_lint:

Reflexion

records antwortet anhand der Definition, die ein record festgehalten hat:

Ausgabe und Ordnung

Beibehaltene Unterschiede

Feldreihenfolge der Ausgabe, Faltung von ==, externe Konstruktion nicht geladener Module und fehlende Record-Warnungen sind unter Unterschiede festgehalten.