Clause
← Toute la documentation

Traduit de l'original anglais · 1e3a39c8-dirty · 2026-10-26 · Lire en anglais

Native records

Les formes de record d'OTP 29 au-delà des records ordinaires sous forme de tuples : leur représentation, leurs opérations et leurs erreurs. Les records tuples sont décrits dans termes.

OTP 29 classe les native records comme expérimentaux. Les faits ci-dessous proviennent des sources épinglées 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) et de sondages en direct sur OTP 29.1.1.

Périmètre

Les trois formes au-delà des records tuples sont implémentées et partagent une même représentation :

FormeSyntaxe
Native record, local-record #r{...}., #r{...}, X#r.f, X#r{...}, motifs, is_record/1,2,3
Qualifié et importé#m:r{...}, X#m:r.f, X#m:r{...}, motifs ; -export_record, -import_record
Inféré (anonyme)X#_.f, X#_{...}, motif #_{...}

Le module de réflexion records est fourni (réflexion). Non fournis : term_to_binary des native records (error:notsup, format externe des termes) et la mise à jour de code à chaud.

Représentation

Opérations

M est le module courant. Toutes les erreurs ont la classe error ; le contenu de badrecord est la valeur fautive, sauf pour une construction externe ratée.

OpérationAccepteÉchec
Construction locale #r{...}Toujours (la définition est locale)Champ inconnu ou valeur manquante sont des erreurs de compilation
Construction externe #m:r{...} (aussi #r{...} importé, aussi #M:r)m:r défini dans le lot et exporté{badrecord, {m, r}} ; puis {badfield, {{m, r}, F}}, {novalue, {{m, r}, F}} (badfield l'emporte)
Accès local X#r.fNative record nommé r (module et indicateur d'export non vérifiés, comme le runtime d'OTP){badrecord, X} ; champ absent {badfield, {{Mod, r}, f}}
Accès externe X#m:r.fModule m, nom r, exporté{badrecord, X} ; {badfield, ...}
Accès anonyme X#_.fTout native record (export non vérifié, comme le runtime d'OTP){badrecord, X} ; {badfield, ...}
Mise à jour locale X#r{...}Module M, nom r{badrecord, X} ; champ inconnu {badfield, ...}
Mise à jour externe X#m:r{...}Exporté, module m, nom ridem
Mise à jour anonyme X#_{...}Exporté ou module Midem
Motif local #r{...}Module M, nom r, chaque champ listé présentpas de correspondance
Motif externe #m:r{...}Module m, nom r ; exporté quand un champ est listépas de correspondance
Motif anonyme #_{...}Tout native record ; exporté ou module M quand un champ est listépas de correspondance

Règles à la compilation

Les messages suivent erl_lint :

Réflexion

records répond à partir de la définition capturée par un record :

Affichage et ordre

Différences conservées

L'ordre des champs à l'affichage, la réduction de ==, la construction externe de modules non chargés et l'absence d'avertissements sur les records sont consignés dans différences.