Курс по 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

Първото извикване задейства функцията с параметри от тип integer, докато второто извикване изпълнява втория вариант на функцията, който очаква два стринга.

Литерални параметри

Интересен случай за многофункции е да имате варианти, които имат литерални стойности като параметри. Разгледайте следните два варианта:

multi sub f(42) {say 'Това е отговорът'}
multi sub f($x) {say "$x не е отговорът"}

Първият вариант се изпълнява само когато извикате функцията с точната стойност 42. В други случаи се използва вторият вариант. Редът, в който тези функции са дефинирани, няма значение.

f(10); # 10 не е отговорът
f(42); # Това е отговорът

Практика

Направете 3 теста върху съдържанието на тази тема.

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

Тест — Тип на връщане   |   Тест 1 — Прости мулти-функции


💪 Или преминете направо към упражнението към този раздел.