Clause
← Уся документація

Англійський оригінал змінився після перекладу, тож частина тексту може бути застарілою. Читати англійською

Перекладено з англійського оригіналу · 1e3a39c8-dirty · 2026-10-26

Функціональні значення

fun F/A, fun M:F/A, анонімні fun із захопленими змінними (замикання), іменовані fun (fun Name(...) -> ... end), виклики функціональних значень (F(Args)) і динамічні виклики (M:F(Args), apply/2,3). Факти взято із зафіксованих вихідних кодів maint-29 (erts/emulator/beam/utils.c erts_cmp, erl_printf_term.c, erl_lint) і перевірок на OTP 29.1.1.

Значення

Вихідний кодЗначенняВиклики входять у
fun f/1Локальний fun цього модуля; кожен fun f/1 модуля — те саме значенняf/1 цього модуля, експортовану чи ні
fun m:f/1Зовнішній fun, що називає m:f/1, також для поточного модуляm:f/1, якщо її експортує модуль програми
fun(X) -> ... endЛокальний fun, що захоплює змінні, які він читає зі свого творця; кожне обчислення будує нове значенняВласну згенеровану функцію fun
fun Name(X) -> ... endТе саме, з Name, зв'язаним із fun усередині його клаузВласну згенеровану функцію fun
fun M:F/A зі зміннимиЗовнішній fun, побудований під час обчислення; дорівнює буквальному fun m:f/1, який він називаєm:f/1, якщо її експортує модуль програми

Динамічні виклики

Замикання

Вбудовування fun

За -O2 (codegen/lowering_fun_inlining.cpp, lowering_list_loops.cpp, lowering_map_loops.cpp) виклик анонімного fun, відомого в місці виклику, понижує клаузи fun на місці виклику, подібно до параметра OTP inline_list_funcs:

Подання

Порівняння і друк

Відмінності

Нумерація, друк і впорядкування fun, порядок захоплення в comprehension, трасування стека undef і виклики модулів поза програмою відрізняються від OTP, як записано у відмінностях.

Інформація про fun

runtime/src/builtins/erlang/fun_info.cpp. erlang:fun_info/1 перелічує елементи OTP у порядку OTP: для локального fun — pid, module, new_index, new_uniq, index, uniq, name (-F/A-fun-N- для анонімного fun), arity, env (захоплені значення) і type; для fun M:F/A — module, name, arity, env ([]) і type. fun_info/2 повертає один {Item, Value}; невідомий елемент дає badarg. pid дорівнює undefined, new_uniq — MD5 імені модуля, а uniq — його перші 24 біти, тож вони відрізняються від OTP. fun_to_list/1 — це текст ~w. is_builtin/3 істинна для вбудованих функцій runtime і erlang:apply/2,3.