Курс языка программирования Raku / Основы / Больше о функциях
Мульти-функции
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 • Български • Русский • Українська