Clause
← Toda a documentação

O original em inglês mudou desde esta tradução, pelo que partes dela podem estar desatualizadas. Ler em inglês

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

Valores de função

fun F/A, fun M:F/A, funs anónimas com variáveis capturadas (closures), funs com nome (fun Name(...) -> ... end), chamadas de valores de função (F(Args)) e chamadas dinâmicas (M:F(Args), apply/2,3). Os factos vêm dos códigos-fonte fixados maint-29 (erts/emulator/beam/utils.c erts_cmp, erl_printf_term.c, erl_lint) e de sondagens no OTP 29.1.1.

Valores

OrigemValorAs chamadas entram em
fun f/1Fun local deste módulo; todos os fun f/1 de um módulo são o mesmo valorf/1 deste módulo, exportada ou não
fun m:f/1Fun externa que designa m:f/1, também para o módulo atualm:f/1 quando um módulo do programa a exporta
fun(X) -> ... endFun local que captura as variáveis que lê do seu criador; cada avaliação constrói um novo valorA função gerada própria da fun
fun Name(X) -> ... endO mesmo, com Name associado à fun dentro das suas cláusulasA função gerada própria da fun
fun M:F/A com variáveisFun externa construída ao ser avaliada; igual à fun literal fun m:f/1 que designam:f/1 quando um módulo do programa a exporta

Chamadas dinâmicas

Closures

Funs expandidas inline

Em -O2 (codegen/lowering_fun_inlining.cpp, lowering_list_loops.cpp, lowering_map_loops.cpp), uma chamada de uma fun anónima conhecida no local onde é chamada rebaixa as cláusulas da fun no lugar da chamada, de forma semelhante à opção inline_list_funcs do OTP:

Representação

Comparação e impressão

Diferenças

A numeração, a impressão e a ordenação das funs, a ordem de captura em comprehensions, os stack traces de undef e as chamadas de módulos fora do programa diferem do OTP tal como registado em diferenças.

Informação de funs

runtime/src/builtins/erlang/fun_info.cpp. erlang:fun_info/1 lista os itens do OTP pela ordem do OTP: para uma fun local pid, module, new_index, new_uniq, index, uniq, name (-F/A-fun-N- para uma fun anónima), arity, env (os valores capturados) e type; para fun M:F/A module, name, arity, env ([]) e type. fun_info/2 devolve um {Item, Value}; um item desconhecido é badarg. pid é undefined, new_uniq o MD5 do nome do módulo e uniq os seus primeiros 24 bits, pelo que diferem dos do OTP. fun_to_list/1 é o texto ~w. is_builtin/3 é verdadeiro para os builtins do runtime e para erlang:apply/2,3.