Clause
← All dokumentation

Översatt från det engelska originalet · 1e3a39c8-dirty · 2026-10-26 · Läs på engelska

Native records

OTP 29:s record-former utöver vanliga tupel-records: deras representation, operationer och fel. Tupel-records beskrivs i termer.

OTP 29 markerar native records som experimentella. Fakta nedan kommer från de fastlåsta maint-29-källorna (erl_lint, erl_expand_records, v3_core, beam_core_to_ssa, erts/emulator/beam/erl_record.c, utils.c, erl_printf_term.c) och liveprober på OTP 29.1.1.

Omfattning

Alla tre former utöver tupel-records är implementerade och delar en representation:

FormSyntax
Native record, lokalt-record #r{...}., #r{...}, X#r.f, X#r{...}, mönster, is_record/1,2,3
Kvalificerade och importerade#m:r{...}, X#m:r.f, X#m:r{...}, mönster; -export_record, -import_record
Härledda (anonyma)X#_.f, X#_{...}, mönstret #_{...}

Reflektionsmodulen records tillhandahålls (reflektion). Tillhandahålls inte: term_to_binary av native records (error:notsup, externt termformat) och uppgradering av kod under drift.

Representation

Operationer

M är den aktuella modulen. Alla fel har klassen error; badrecord-nyttolaster är det felaktiga värdet utom vid misslyckad extern konstruktion.

OperationGodtarFel
Lokal konstruktion #r{...}Alltid (definitionen är lokal)Okänt fält eller saknat värde är kompileringsfel
Extern konstruktion #m:r{...} (även importerad #r{...}, även #M:r)m:r definierad i batchen och exporterad{badrecord, {m, r}}; sedan {badfield, {{m, r}, F}}, {novalue, {{m, r}, F}} (badfield vinner)
Lokal åtkomst X#r.fNative record med namnet r (modul och exportflagga kontrolleras inte, som i OTP:s runtime){badrecord, X}; saknat fält {badfield, {{Mod, r}, f}}
Extern åtkomst X#m:r.fModul m, namn r, exporterat{badrecord, X}; {badfield, ...}
Anonym åtkomst X#_.fVilket native record som helst (export kontrolleras inte, som i OTP:s runtime){badrecord, X}; {badfield, ...}
Lokal uppdatering X#r{...}Modul M, namn r{badrecord, X}; okänt fält {badfield, ...}
Extern uppdatering X#m:r{...}Exporterat, modul m, namn rsamma
Anonym uppdatering X#_{...}Exporterat eller modul Msamma
Lokalt mönster #r{...}Modul M, namn r, varje listat fält finnsingen matchning
Externt mönster #m:r{...}Modul m, namn r; exporterat när ett fält listasingen matchning
Anonymt mönster #_{...}Vilket native record som helst; exporterat eller modul M när ett fält listasingen matchning

Regler vid kompilering

Meddelanden följer erl_lint:

Reflektion

records svarar utifrån definitionen som ett record fångade:

Utskrift och ordning

Behållna skillnader

Fältordning vid utskrift, vikning av ==, extern konstruktion för moduler som inte är laddade och saknade varningar för records finns beskrivna i skillnader.