Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Классы и объекты / Атрибуты / Exercises / Изменяемая метка

Решение: Изменяемая метка

Вот один из возможных вариантов решения задачи.

Код

class Label {
    has $.text is rw;
}

my $l = Label.new(text => 'draft');
$l.text ~= ' (revised)';
say $l.text;

🦋 Исходный код можно найти в файле changeable-label.raku.

Вывод

draft (revised)

Комментарии

  1. Трейт is rw заставляет аксессор возвращать изменяемый контейнер, поэтому он может стоять слева от присваивания.

  2. Раз запись разрешена, с ним работает и составной оператор ~=: $l.text ~= ' (revised)' читает текущий текст, приписывает суффикс и записывает результат обратно — и всё это через один и тот же аксессор.

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

Изменяемая метка   |   Методы