تا

تابع بی‌نام در Elixir

4 تمرین

درباره‌ی تابع بی‌نام

توابع بی‌نام در سراسر الیکسیر به‌طور معمول به‌تنهایی، به‌عنوان مقدار بازگشتی، و به‌عنوان آرگومان در توابع مرتبه بالاتر مانند Enum.map/2 به کار می‌روند:

Enum.map([1, 2, 3], fn n -> n + 1 end)
# => [2, 3, 4]

با توابع در الیکسیر مانند شهروندان درجه‌یک رفتار می‌شود:

  • توابع نام‌دار و بی‌نام را می‌توان به متغیرها نسبت داد.
  • توابع نام‌دار و بی‌نام را می‌توان مانند داده، به‌عنوان آرگومان و مقدار بازگشتی، جابه‌جا کرد.
  • توابع بی‌نام را می‌توان به‌صورت پویا ساخت.

توابع بی‌نام با کلیدواژه‌ی 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
    

توابع بی‌نام در الیکسیر «بستار» هستند. آن‌ها می‌توانند به متغیرهایی دسترسی داشته باشند که هنگام تعریف تابع در محدوده قرار دارند. متغیرهایی که داخل یک تابع بی‌نام مقدار می‌گیرند، از بیرون آن قابل دسترسی نیستند:

y = 2

square = fn ->
  x = 3
  x * y
end

square.()
# => 6

x
# => ** (CompileError): undefined function x/0
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

تابع بی‌نام را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین تابع بی‌نام قفل 1 تمرین دیگر را باز کنید