Курс языка программирования Raku / Основы / Основы функций / Создание и вызов функций
Именованные параметры
В отличие от позиционных параметров, именованные параметры указываются по их именам.
Следующая функция принимает два параметра, называемых
$from и $to.
sub distance(:$from, :$to) { $from - $to }Теперь, чтобы вызвать функцию, нужно указать имена аргументов:
say distance(from => 30, to => 10); # 20Ошибка возникает, если передать аргументы, как будто они позиционные.
Например, вызов distance(30, 10) приведет к ошибке:
Слишком много позиционных аргументов; ожидалось 0 аргументов, но получено 2
в подпрограмме distance на строке 1 в t.raku
в блоке <unit> на строке 2 в t.raku
Хорошая новость в том, что именованные аргументы можно перечислять в любом порядке. Следующие два вызова абсолютно эквивалентны:
say distance(from => 30, to => 10); # 20
say distance(to => 10, from => 30); # 20Передача переменных
Когда значение, которое вы хотите передать функции, хранится в переменной, имя которой совпадает с именем параметра, вы можете использовать специальный синтаксис, который уменьшает количество вводимых символов:
my $from = 30;
my $to = 10;
say distance(:$from, :$to); # 20Это похоже на более многословный вызов:
say distance(from => $from, to => $to); # 20Снова, порядок здесь не важен:
say distance(:$to, :$from); # 20Если имя переменной отличается от имени параметра, используйте один из способов передачи пары:
my $a = 20;
my $b = 10;
say distance(from => $a, to => $b);
# или:
say distance(:from($a), :to($b));Практика
Пройдите 2 теста по содержанию этой темы.
Навигация по курсу
← Тест: Вызов функции | Тест 1: Именованные параметры →
💪 Или перейдите сразу к упражнениям этого
раздела.