Corso di Raku / Oggetti, input/output ed eccezioni / Classi e oggetti

Introspezione degli oggetti

Nella sezione sui contenitori hai usato .^name per chiedere a un valore il suo tipo. Le stesse metachiamate .^ ti permettono di ispezionare una classe e i suoi oggetti: i loro nomi, i loro attributi e la loro posizione in una gerarchia.

Il metametodo .^name restituisce il nome della classe:

class Dog {
    has Str $.name;
    method bark { 'Woof' }
}

say Dog.^name; # Dog

Il metametodo .^attributes elenca gli attributi della classe. Ciascuno è mostrato con il suo tipo e il suo nome privato interno (la forma $! che hai incontrato con gli attributi privati):

say Dog.^attributes; # (Str $!name)

L’introspezione è utile per gli strumenti che lavorano con gli oggetti in modo generico — per esempio per stampare ogni attributo di un oggetto senza conoscerne in anticipo la classe. L’argomento successivo esamina come vedere la catena di ereditarietà di una classe.

Anche in questa sezione

Pratica

Risolvi 1 quiz sul contenuto di questa sezione.

Esercizi

Questa sezione contiene 2 esercizi. Guarda tutti gli argomenti di questa sezione prima di iniziare gli esercizi.

  1. Descrivete una classe
  2. Contate gli attributi

Soluzione: Un robot che balla   |   La catena di ereditarietà