Clause
← Toda a documentação

Traduzido do original em inglês · 1e3a39c8-dirty · 2026-10-26 · Ler em inglês

Native records

As formas de record do OTP 29 para além dos records comuns em tuplo: a sua representação, operações e erros. Os records em tuplo estão em termos.

O OTP 29 marca os native records como experimentais. Os factos abaixo vêm dos códigos-fonte fixados 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) e de sondagens em direto no OTP 29.1.1.

Âmbito

As três formas para além dos records em tuplo estão implementadas e partilham uma única representação:

FormaSintaxe
Native record, local-record #r{...}., #r{...}, X#r.f, X#r{...}, padrões, is_record/1,2,3
Qualificado e importado#m:r{...}, X#m:r.f, X#m:r{...}, padrões; -export_record, -import_record
Inferido (anónimo)X#_.f, X#_{...}, padrão #_{...}

O módulo de reflexão records está disponível (reflexão). Não disponíveis: term_to_binary de native records (error:notsup, formato externo de termos) e a atualização de código a quente.

Representação

Operações

M é o módulo atual. Todos os erros têm a classe error; os conteúdos de badrecord são o valor em causa, exceto na construção externa falhada.

OperaçãoAceitaFalha
Construção local #r{...}Sempre (a definição é local)Campo desconhecido ou valor em falta são erros de compilação
Construção externa #m:r{...} (também #r{...} importado, também #M:r)m:r definido no lote e exportado{badrecord, {m, r}}; depois {badfield, {{m, r}, F}}, {novalue, {{m, r}, F}} (badfield prevalece)
Acesso local X#r.fNative record chamado r (módulo e flag de exportação não verificados, como no runtime do OTP){badrecord, X}; campo em falta {badfield, {{Mod, r}, f}}
Acesso externo X#m:r.fMódulo m, nome r, exportado{badrecord, X}; {badfield, ...}
Acesso anónimo X#_.fQualquer native record (exportação não verificada, como no runtime do OTP){badrecord, X}; {badfield, ...}
Atualização local X#r{...}Módulo M, nome r{badrecord, X}; campo desconhecido {badfield, ...}
Atualização externa X#m:r{...}Exportado, módulo m, nome rigual
Atualização anónima X#_{...}Exportado ou módulo Migual
Padrão local #r{...}Módulo M, nome r, todos os campos listados presentessem correspondência
Padrão externo #m:r{...}Módulo m, nome r; exportado quando um campo é listadosem correspondência
Padrão anónimo #_{...}Qualquer native record; exportado ou módulo M quando um campo é listadosem correspondência

Regras em tempo de compilação

As mensagens seguem o erl_lint:

Reflexão

records responde a partir da definição que um record capturou:

Impressão e ordem

Diferenças mantidas

A ordem dos campos na impressão, a redução de ==, a construção externa de módulos não carregados e os avisos de records em falta estão registados em diferenças.