Курс по 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).Кандидатите се проверяват от най-специфичния към най-общия — точно в реда, в който са написани тук.