Cursus Raku / Geavanceerd / Subroutines / Meervoudige dispatch / Exercises / De grootte classificeren
Oplossing: De grootte classificeren
Hier is een mogelijke oplossing voor de opgave.
Code
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);🦋 Je kunt de broncode vinden in het bestand classify-sign.raku.
Uitvoer
small
medium
largeOpmerkingen
Alle drie de kandidaten nemen een enkele
Intaan, dus zonder dewhere-clausules zouden ze botsen. De voorwaarden op de eerste twee maken ze onderscheidend, en de derde is het vangnet.De
where-clausules testen$n.abs, dus alleen de grootte bepaalt het resultaat en het teken wordt genegeerd.size(7)komt overeen met de eerste kandidaat (small), terwijlsize(-250)een absolute waarde van250heeft, die niet aan beide voorwaarden voldoet en doorvalt naar het vangnet (large).De kandidaten worden getest van de meest specifieke naar de meest algemene — precies de volgorde waarin ze hier geschreven zijn.