Курс Raku / Розширені / Підпрограми / Множинна диспетчеризація / Вправи / Класифікувати розмір
Розв’язання: Класифікувати розмір
Ось один із можливих варіантів розв’язання задачі.
Код
multi sub size(Int $n where $n.abs < 10) { 'small' }
multi sub size(Int $n where $n.abs < 100) { 'medium' }
multi sub size(Int $n) { 'large' }
say size(7);
say size(30);
say size(-250);🦋 Вихідний код можна знайти у файлі classify-sign.raku.
Вивід
small
medium
largeКоментарі
Усі три кандидати приймають один
Int, тож без реченьwhereвони конфліктували б. Умови на перших двох роблять їх різними, а третій є всеохопним.Речення
whereперевіряють$n.abs, тож результат визначає сама лише величина, а знак ігнорується.size(7)збігається з першим кандидатом (small), тоді якsize(-250)має абсолютне значення250, яке не проходить жодної з умов і провалюється до всеохопного (large).Кандидати перевіряються від найспецифічнішого до найзагальнішого — саме в тому порядку, в якому їх тут записано.