Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Функциональное программирование / Функции высшего порядка
Возврат подпрограмм
Подпрограмма может и возвращать подпрограмму. Это позволяет строить новые функции на лету, подгоняя их под переданные аргументы:
sub adder($n) {
sub ($x) { $x + $n };
}
my &add5 = adder(5);
say add5(3); # 8adder(5) строит и возвращает анонимную подпрограмму,
прибавляющую 5 к своему аргументу. Мы сохраняем её в
&add5 и вызываем как любую другую подпрограмму. Вызов
adder(10) дал бы другой сумматор, прибавляющий десять.
Обратите внимание, что возвращённая подпрограмма помнит значение
$n из того вызова, который её создал: add5
держит свою 5 даже после того, как adder
завершился. Подпрограмму, которая захватывает значения из области
видимости, где была создана, называют замыканием — ему посвящён
следующий раздел.
Возврат функций — компактный способ порождать семейства родственных
операций, не повторяясь: одно определение adder даёт
неограниченное число конкретных сумматоров.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Тест — Передача подпрограмм | Тест — Функции высшего порядка →
💪 Или перейдите сразу к упражнениям этого
раздела.