Курс языка программирования Raku / Продвинутый уровень / Подпрограммы / Мультиметоды / Exercises / Классификация размера
Решение: Классификация размера
Вот возможное решение задачи.
Код
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).Кандидаты проверяются от наиболее конкретного к наиболее общему — именно в том порядке, в котором они здесь записаны.