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

Attributi in lettura e scrittura

Per impostazione predefinita, l’accessore creato da has $.name è di sola lettura. Il valore viene inizializzato nel costruttore, dopodiché puoi leggerlo ma non cambiarlo dall’esterno dell’oggetto. Assegnarvi qualcosa è un errore:

class Dog {
    has $.name;
}

my $rex = Dog.new(name => 'Rex');
$rex.name = 'Max';

Il programma si ferma con:

Cannot modify an immutable Str (Rex)

Per permettere che il valore venga cambiato attraverso l’accessore, contrassegna l’attributo con il tratto is rw:

class Dog {
    has $.name is rw;
}

my $rex = Dog.new(name => 'Rex');
$rex.name = 'Max';
say $rex.name; # Max

Ora l’accessore restituisce un contenitore scrivibile, quindi l’assegnamento funziona e il name dell’oggetto diventa Max.

Attributi   |   Valori predefiniti


💪 Oppure vai direttamente agli esercizi di questa sezione.