Clause
← Toda la documentación

El original en inglés ha cambiado desde que se hizo esta traducción, por lo que partes de ella pueden estar desactualizadas. Leer en inglés

Traducido del original en inglés · 1e3a39c8-dirty · 2026-10-26

Valores de función

fun F/A, fun M:F/A, funs anónimos con variables capturadas (clausuras, closures), funs con nombre (fun Name(...) -> ... end), llamadas a valores de función (F(Args)) y llamadas dinámicas (M:F(Args), apply/2,3). Los datos provienen de los fuentes fijados de maint-29 (erts/emulator/beam/utils.c erts_cmp, erl_printf_term.c, erl_lint) y de pruebas sobre OTP 29.1.1.

Valores

Código fuenteValorLas llamadas entran en
fun f/1Fun local de este módulo; todo fun f/1 de un módulo es el mismo valorf/1 de este módulo, exportada o no
fun m:f/1Fun externo que designa m:f/1, también para el módulo actualm:f/1 cuando un módulo del programa la exporta
fun(X) -> ... endFun local que captura las variables que lee de su creador; cada evaluación construye un valor nuevoLa función generada propia del fun
fun Name(X) -> ... endLo mismo, con Name vinculado al fun dentro de sus cláusulasLa función generada propia del fun
fun M:F/A con variablesFun externo construido al evaluarse; igual al fun m:f/1 literal que designam:f/1 cuando un módulo del programa la exporta

Llamadas dinámicas

Clausuras

Funs en línea

Con -O2 (codegen/lowering_fun_inlining.cpp, lowering_list_loops.cpp, lowering_map_loops.cpp), una llamada a un fun anónimo conocido en el punto de llamada se transforma insertando sus cláusulas en lugar de la llamada, de forma similar a la opción inline_list_funcs de OTP:

Representación

Comparación e impresión

Diferencias

La numeración, la impresión y el orden de los funs, el orden de captura en las comprehensions, las trazas de pila de undef y las llamadas a módulos ajenos al programa difieren de OTP tal como se recoge en diferencias.

Información de funs

runtime/src/builtins/erlang/fun_info.cpp. erlang:fun_info/1 enumera los elementos de OTP en el orden de OTP: para un fun local pid, module, new_index, new_uniq, index, uniq, name (-F/A-fun-N- para un fun anónimo), arity, env (los valores capturados) y type; para fun M:F/A module, name, arity, env ([]) y type. fun_info/2 devuelve un {Item, Value}; un elemento desconocido es badarg. pid es undefined, new_uniq el MD5 del nombre del módulo y uniq sus primeros 24 bits, por lo que difieren de los de OTP. fun_to_list/1 es el texto de ~w. is_builtin/3 es verdadero para los builtins del runtime y erlang:apply/2,3.