Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Функциональное программирование / Функции высшего порядка
Передача подпрограмм
Чтобы принять подпрограмму как параметр, объявите его с сигилом
&. Внутри тела её можно вызывать по имени:
sub apply(&f, $x) {
f($x);
}
say apply(* + 3, 10); # 13Параметр &f получает кусочек кода, а
f($x) его вызывает. Здесь мы передали * + 3 —
выражение с Whatever, означающее «прибавь три к тому, что тебе
дадут», — поэтому apply(* + 3, 10) вычисляет
13.
Именованную подпрограмму передать так же просто: сошлитесь на неё с
сигилом &, чтобы она была передана, а не вызвана:
sub double($n) { $n * 2 }
sub apply(&f, $x) {
f($x);
}
say apply(&double, 5); # 10Ровно так и работают map и grep: это
подпрограммы, которые принимают другую подпрограмму — ваш блок — и
применяют её к каждому элементу. Если ваши собственные подпрограммы тоже
будут принимать код, они станут такими же гибкими.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Функции высшего порядка | Тест — Передача подпрограмм →
💪 Или перейдите сразу к упражнениям этого
раздела.