Corso di Raku / Avanzato / Subroutine / Dispatch multiplo / Exercises / Classificare la dimensione
Soluzione: Classificare la dimensione
Ecco una possibile soluzione per questo esercizio.
Codice
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);🦋 Puoi trovare il codice sorgente nel file classify-sign.raku.
Output
small
medium
largeCommenti
Tutti e tre i candidati prendono un singolo
Int, quindi senza le clausolewhereentrerebbero in conflitto. Le condizioni sui primi due li rendono distinti, e il terzo funge da raccoglitore generale.Le clausole
wheretestano$n.abs, quindi solo la grandezza determina il risultato e il segno viene ignorato.size(7)corrisponde al primo candidato (small), mentresize(-250)ha un valore assoluto di250, che non soddisfa nessuna delle due condizioni e ricade nel raccoglitore generale (large).I candidati vengono testati dal piu specifico al piu generale — esattamente nell’ordine in cui sono scritti qui.