Clause
← All dokumentation

Det engelska originalet har ändrats sedan översättningen gjordes, så delar av den kan vara inaktuella. Läs på engelska

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

Funktionsvärden

fun F/A, fun M:F/A, anonyma funs med infångade variabler (closures), namngivna funs (fun Name(...) -> ... end), anrop av funktionsvärden (F(Args)) och dynamiska anrop (M:F(Args), apply/2,3). Fakta kommer från de fastlåsta maint-29-källorna (erts/emulator/beam/utils.c erts_cmp, erl_printf_term.c, erl_lint) och prober på OTP 29.1.1.

Värden

KällaVärdeAnrop går till
fun f/1Lokal fun i denna modul; varje fun f/1 i en modul är samma värdef/1 i denna modul, exporterad eller inte
fun m:f/1Extern fun som namnger m:f/1, även för den aktuella modulenm:f/1 när en modul i programmet exporterar den
fun(X) -> ... endLokal fun som fångar in de variabler den läser från sin skapare; varje utvärdering bygger ett nytt värdeFunens egen genererade funktion
fun Name(X) -> ... endSamma sak, med Name bundet till funen inuti dess klausulerFunens egen genererade funktion
fun M:F/A med variablerExtern fun som byggs när den utvärderas; lika med den literala fun m:f/1 den namngerm:f/1 när en modul i programmet exporterar den

Dynamiska anrop

Closures

Inlinade funs

Vid -O2 (codegen/lowering_fun_inlining.cpp, lowering_list_loops.cpp, lowering_map_loops.cpp) sänks ett anrop av en anonym fun som är känd där den anropas till funens klausuler på anropets plats, ungefär som OTP:s alternativ inline_list_funcs:

Representation

Jämförelse och utskrift

Skillnader

Numrering, utskrift och ordning av funs, ordningen för infångade värden i comprehensions, stackspårningar för undef och anrop av moduler utanför programmet skiljer sig från OTP så som det registrerats i skillnader.

Information om funs

runtime/src/builtins/erlang/fun_info.cpp. erlang:fun_info/1 listar OTP:s poster i OTP:s ordning: för en lokal fun pid, module, new_index, new_uniq, index, uniq, name (-F/A-fun-N- för en anonym fun), arity, env (de infångade värdena) och type; för fun M:F/A module, name, arity, env ([]) och type. fun_info/2 returnerar en {Item, Value}; en okänd post ger badarg. pid är undefined, new_uniq MD5 av modulnamnet och uniq dess första 24 bitar, så de skiljer sig från OTP:s. fun_to_list/1 är texten för ~w. is_builtin/3 är sant för runtimens inbyggda funktioner och erlang:apply/2,3.