Corso di Raku / Oggetti, input/output ed eccezioni / Classi e oggetti / Introspezione degli oggetti / Exercises / Descrivete una classe

Soluzione: Descrivete una classe

Ecco una possibile soluzione del compito.

Codice

class Animal {
}

class Dog is Animal {
}

say Dog.^name;
say Dog.^mro.elems;
say 'Cat'Dog.^mro.map(*.^name);

🦋 Trova il programma nel file describe-a-class.raku.

Output

Dog
4
False

Commenti

  1. .^name restituisce il nome proprio della classe, Dog.

  2. .^mro restituisce la catena di ereditarietà, e .elems la conta. Nella catena ci sono quattro tipi — Dog, il suo genitore Animal e gli universali Any e Mu — quindi il conteggio è 4.

  3. .^mro.map(*.^name) trasforma quella catena nell’elenco dei nomi di tipo, (Dog Animal Any Mu). L’operatore di appartenenza insiemistica controlla poi se Cat è uno di essi. Dog non discende da alcun Cat, quindi la risposta è False.

Descrivete una classe   |   Contate gli attributi