Курс языка программирования Raku / Продвинутый уровень / Подпрограммы / Сигнатуры / Exercises / Поглощающие именованные аргументы

Решение: Поглощающие именованные аргументы

Вот возможное решение задачи.

Код

sub describe($name, *%opts) {
    my $details = %opts.sort.map({ "{.key}={.value}" }).join(', ');
    "$name: $details";
}

say describe('Anna', colour => 'red', size => 5);

🦋 Исходный код можно найти в файле slurpy-hash.raku.

Вывод

Anna: colour=red, size=5

Комментарии

  1. Фиксированный позиционный параметр $name заполняется первым, а поглощающий *%opts собирает все оставшиеся именованные аргументы в хеш.

  2. %opts.sort упорядочивает пары по ключу, поэтому вывод детерминирован — colour идёт перед size. Метод .map превращает каждую пару в строку key=value с помощью .key и .value, а .join(', ') соединяет их вместе.

  3. Итоговая строка интерполирует $name и собранный $details, давая Anna: colour=red, size=5.

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

Поглощающие именованные аргументы   |   Тест — Поглощающие параметры