Курс Раку / Основи / Більше про функції

Мульти-функції

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. Оригінальний текст англійською мовою.

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