Οι ανώνυμες συναρτήσεις χρησιμοποιούνται συχνά σε όλη την 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 είναι closures. Μπορούν να έχουν πρόσβαση σε μεταβλητές που βρίσκονται στο πεδίο εμβέλειας όταν ορίζεται η συνάρτηση. Οι μεταβλητές που ανατίθενται μέσα σε μια ανώνυμη συνάρτηση δεν είναι προσβάσιμες έξω από αυτήν:
y = 2
square = fn ->
x = 3
x * y
end
square.()
# => 6
x
# => ** (CompileError): undefined function x/0