Курс по 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; # a plain copy
$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Навигация в курса
← Тест — Масиви и списъци | Изравняване и елементизация →
💪 Или преминете направо към упражненията в този
раздел.