Raku-Kurs / Objekte, Ein- und Ausgabe und Ausnahmen / Klassen und Objekte / Attribute

Les- und schreibbare Attribute

Standardmäßig ist der Accessor, den has $.name erzeugt, nur lesbar. Der Wert wird im Konstruktor gesetzt; danach können Sie ihn lesen, aber von außerhalb des Objekts nicht mehr ändern. Eine Zuweisung ist ein Fehler:

class Dog {
    has $.name;
}

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

Das bricht ab mit:

Cannot modify an immutable Str (Rex)

Damit der Wert über den Accessor geändert werden darf, versehen Sie das Attribut mit dem Trait is rw:

class Dog {
    has $.name is rw;
}

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

Jetzt liefert der Accessor einen schreibbaren Container, die Zuweisung funktioniert also, und der name des Objekts wird zu Max.

Kursnavigation

Attribute   |   Standardwerte


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.