Курс 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.

Навігація курсом

Атрибути   |   Значення за замовчуванням


💪 Або перейдіть одразу до вправ цього розділу.