Clause
← Toute la documentation

L'original anglais a changé depuis cette traduction ; certaines parties peuvent donc être obsolètes. Lire en anglais

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

Valeurs fonctionnelles

fun F/A, fun M:F/A, funs anonymes avec variables capturées (fermetures, closures), funs nommées (fun Name(...) -> ... end), appels de valeurs fonctionnelles (F(Args)) et appels dynamiques (M:F(Args), apply/2,3). Les faits proviennent des sources épinglées de maint-29 (erts/emulator/beam/utils.c erts_cmp, erl_printf_term.c, erl_lint) et de sondages sur OTP 29.1.1.

Valeurs

SourceValeurLes appels entrent dans
fun f/1Fun locale de ce module ; chaque fun f/1 d'un module est la même valeurf/1 de ce module, exportée ou non
fun m:f/1Fun externe désignant m:f/1, y compris pour le module courantm:f/1 quand un module du programme l'exporte
fun(X) -> ... endFun locale capturant les variables qu'elle lit chez son créateur ; chaque évaluation construit une nouvelle valeurLa fonction générée propre à la fun
fun Name(X) -> ... endIdem, avec Name lié à la fun à l'intérieur de ses clausesLa fonction générée propre à la fun
fun M:F/A avec des variablesFun externe construite à l'évaluation ; égale à la fun littérale fun m:f/1 qu'elle désignem:f/1 quand un module du programme l'exporte

Appels dynamiques

Fermetures

Funs développées en ligne

À -O2 (codegen/lowering_fun_inlining.cpp, lowering_list_loops.cpp, lowering_map_loops.cpp), un appel de fun anonyme connue au point d'appel développe les clauses de la fun à la place de l'appel, comme le fait l'option inline_list_funcs d'OTP :

Représentation

Comparaison et affichage

Différences

La numérotation, l'affichage et l'ordre des funs, l'ordre de capture dans les comprehensions, les traces de pile undef et les appels de modules hors du programme diffèrent d'OTP comme consigné dans différences.

Informations sur les funs

runtime/src/builtins/erlang/fun_info.cpp. erlang:fun_info/1 liste les éléments d'OTP dans l'ordre d'OTP : pour une fun locale pid, module, new_index, new_uniq, index, uniq, name (-F/A-fun-N- pour une fun anonyme), arity, env (les valeurs capturées) et type ; pour fun M:F/A module, name, arity, env ([]) et type. fun_info/2 renvoie un seul {Item, Value} ; un élément inconnu donne badarg. pid vaut undefined, new_uniq est le MD5 du nom du module et uniq ses 24 premiers bits, de sorte qu'ils diffèrent de ceux d'OTP. fun_to_list/1 est le texte ~w. is_builtin/3 est vrai pour les builtins du runtime et erlang:apply/2,3.