Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Функционално програмиране / Функции от по-висок ред

Връщане на подпрограми

Подпрограмата може и да връща подпрограма. Това ви позволява да строите нови функции в движение, скроени според аргументите, които подавате:

sub adder($n) {
    sub ($x) { $x + $n };
}

my &add5 = adder(5);
say add5(3); # 8

adder(5) изгражда и връща анонимна подпрограма, която добавя 5 към аргумента си. Съхраняваме я в &add5 и я извикваме като всяка друга подпрограма. Извикването на adder(10) би дало друг събирач, който добавя десет.

Забележете, че върнатата подпрограма помни стойността на $n от извикването, което я е създало — add5 пази своята 5 дори след като adder е приключил. Подпрограма, която улавя стойности от обхвата, в който е създадена, се нарича затваряне и е темата на следващия раздел.

Връщането на функции е сбит начин да произвеждате семейства от сродни операции, без да се повтаряте: едно определение на adder дава неограничен брой конкретни събирачи.

Практика

Направете 1 тест върху съдържанието на тази тема.

Навигация в курса

Тест — Подаване на подпрограми   |   Тест — Функции от по-висок ред


💪 Или преминете направо към упражненията в този раздел.