تُستخدم الدوال المجهولة كثيرًا في جميع أنحاء Elixir بمفردها، وكقيم مُرجعة، وكوسائط في الدوال عالية الرتبة مثل Enum.map/2:
Enum.map([1, 2, 3], fn n -> n + 1 end)
# => [2, 3, 4]
تُعامَل الدوال في Elixir كمواطنين من الدرجة الأولى:
تُنشأ الدوال المجهولة بالكلمة المفتاحية fn وتُستدعى بنقطة (.):
function_variable = fn n -> n + 1 end
function_variable.(1)
# => 2
يمكن إنشاء الدوال المجهولة باستخدام اختصار الالتقاط &.
تشير & الأولى إلى بداية تعبير الالتقاط.
تشير &1 و&2 وهكذا إلى الوسائط الموضعية للدالة المجهولة.
# Instead of:
fn x, y -> abs(x) + abs(y) end
# We can write:
&(abs(&1) + abs(&2))
يمكن أيضًا استخدام عامل الالتقاط & من أجل التقاط دالة مسماة موجودة:
# Instead of:
fn a, b -> a <= b end
# We can capture the function using its name and arity:
&<=/2
الدوال المجهولة في Elixir هي إغلاقات. تستطيع الوصول إلى المتغيرات الموجودة في النطاق عند تعريف الدالة. أما المتغيرات المُسندة داخل دالة مجهولة فلا يمكن الوصول إليها من خارجها:
y = 2
square = fn ->
x = 3
x * y
end
square.()
# => 6
x
# => ** (CompileError): undefined function x/0