Курс языка программирования Raku / Продвинутый уровень / Контейнеры / Упорядоченные контейнеры
Привязка с помощью :=
До сих пор каждая созданная вами переменная порождала новый
контейнер, и присваивание через = помещало значение
в этот контейнер. Привязка, записываемая через :=,
работает иначе: она делает имя ссылкой на уже существующий
контейнер, а не создаёт новый.
После привязки оба имени разделяют один и тот же контейнер, поэтому изменение через одно из них видно через другое:
my $x = 10;
my $y := $x;
$x = 20;
say $y; # 20Здесь $y := $x не копирует значение 10. Оно
делает $y другим именем для того же контейнера, что и
$x. Когда $x позже устанавливается в
20, чтение $y тоже возвращает
20.
Сравните это с обычным присваиванием, которое копирует значение в отдельный контейнер:
my $x = 10;
my $y = $x; # обычная копия
$x = 20;
say $y; # 10Привязка работает и с массивами. Следующий пример делает
@alias другим именем для @data:
my @data = 1, 2, 3;
my @alias := @data;
@alias[0] = 99;
say @data; # [99 2 3]Ещё один нюанс: если вы привяжете имя непосредственно к литеральному значению, за ним не стоит контейнер, поэтому имя становится доступным только для чтения:
my $pi := 3.14;
$pi = 3;Cannot assign to an immutable value
in block <unit> at t.raku line 2Навигация по курсу
← Тест — Массивы и списки | Сглаживание и элементизация →
💪 Или перейдите сразу к упражнениям этого
раздела.