Raku kurss / Padziļināti / Konteineri / Kārtotie konteineri

Saistīšana ar :=

Līdz šim katrs jūsu izveidotais mainīgais radīja jaunu konteineru, un piešķiršana ar = ievietoja vērtību tajā konteinerā. Saistīšana, ko raksta ar :=, ir citāda: tā liek nosaukumam norādīt uz jau esošu konteineru, nevis veidot jaunu.

Pēc saistīšanas abi nosaukumi dalās ar to pašu konteineru, tāpēc izmaiņa, kas veikta caur vienu no tiem, ir redzama caur otru:

my $x = 10;
my $y := $x;

$x = 20;
say $y; # 20

Šeit $y := $x nekopē vērtību 10. Tas padara $y par citu nosaukumu tam pašam konteineram, kas ir $x. Kad $x vēlāk tiek iestatīts uz 20, nolasot $y arī atgriež 20.

Salīdziniet to ar parasto piešķiršanu, kas kopē vērtību atsevišķā konteinerā:

my $x = 10;
my $y = $x; # a plain copy

$x = 20;
say $y; # 10

Saistīšana darbojas arī ar masīviem. Šis piemērs padara @alias par citu nosaukumu masīvam @data:

my @data = 1, 2, 3;
my @alias := @data;

@alias[0] = 99;
say @data; # [99 2 3]

Vēl viena detaļa: ja saistāt nosaukumu tieši ar literālu vērtību, aiz tā nav konteinera, tāpēc nosaukums kļūst tikai lasāms:

my $pi := 3.14;
$pi = 3;
Cannot assign to an immutable value
  in block <unit> at t.raku line 2

Kursa navigācija

Viktorīna — Masīvi un saraksti   |   Saplacināšana un vienuma veidošana


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.