Курс Раку / Основи / Більше про функції
Мульти-функції
Raku реалізує множинну диспетчеризацію на основі сигнатури функції. Це дозволяє створювати функції, які мають однакову назву, але різні типи вхідних даних. Використовуйте декларацію multi
для кожного з варіантів функції.
multi sub add(Int $x, Int $y) { $x + $y }
multi sub add(Str $x, Str $y) { $x ~ $y }
(Можна опустити sub
після multi
.)
Якщо у вас є два варіанти однієї і тієї ж функції, компілятор здійснює множинну диспетчеризацію в залежності від того, які аргументи він бачить у виклику функції. Порівняйте наступні два виклики:
say add(10, 20); # 30
say add('10', '20'); # 1020
Перший виклик запускає функцію з цілими параметрами, тоді як другий виклик запускає другий варіант функції, яка очікує два рядки.
Літеральні параметри
Цікавим випадком для багатофункцій є наявність варіантів, які мають літеральні значення як параметри. Розгляньте наступні два варіанти:
multi sub f(42) {say 'Це відповідь'}
multi sub f($x) {say "$x не є відповіддю"}
Перший варіант запускається тільки тоді, коли ви викликаєте функцію з точним значенням 42. В інших випадках використовується другий варіант. Порядок, у якому ці функції визначені, не має значення.
f(10); # 10 не є відповіддю
f(42); # Це відповідь
Практика
Виконайте вікторини, що охоплюють зміст цієї теми.
Навігація по курсу
← Більше про функції / Тип повернення | 💪 Вправа: Факторіал з мульти-функціями →
Ця сторінка автоматично перекладена за допомогою ChatGPT 4o. Оригінальний текст англійською мовою.
Переклади цієї сторінки: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська