Курс языка программирования 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.
Навигация по курсу
← Атрибуты | Значения по умолчанию →
💪 Или перейдите сразу к упражнениям этого раздела.