Курс по Raku / Обекти, вход-изход и изключения / Класове и обекти / Атрибути

Атрибути за четене и писане

По подразбиране аксесорът, създаден от has $.name, е само за четене. Стойността се задава в конструктора, след което можете да я четете, но не и да я променяте отвън. Присвояването ѝ е грешка:

class Dog {
    has $.name;
}

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

Това спира с:

Cannot modify an immutable Str (Rex)

За да позволите стойността да се променя през аксесора, отбележете атрибута с трейта is rw:

class Dog {
    has $.name is rw;
}

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

Сега аксесорът връща записваем контейнер, така че присвояването работи и name на обекта става Max.

Навигация в курса

Атрибути   |   Стойности по подразбиране


💪 Или преминете направо към упражненията в този раздел.