Курс по 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); # Това е отговорът

Практика

Попълнете тестовете, които обхващат съдържанието на тази тема.

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

Повече за функциите / Тип на връщане   |   💪 Упражнение: Факториел с мулти-функции

Тази страница е автоматично преведена с ChatGPT 4.0. Оригинален текст на английски

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