Курс языка программирования 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));

Практика

Пройдите викторины, которые охватывают содержание этой темы.

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

Создание и вызов функций / Позиционные параметры   |   Создание и вызов функций / Значения по умолчанию


💪 Or jump directly to the exercises to this section.

Эта страница автоматически переведена с помощью ChatGPT 4o. Оригинальный текст на английском языке.

Переводы этой страницы: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська