Kurso de Raku / Progresinta / Ujoj / Ordigitaj ujoj

Ligado per :=

Ĝis nun ĉiu variablo, kiun vi kreis, naskis novan ujon, kaj atribuo per = metis valoron en tiun ujon. Ligado, skribata per :=, estas alia: ĝi igas nomon referenci ekzistantan ujon anstataŭ krei novan.

Post ligado la du nomoj kunhavas la saman ujon, do ŝanĝo farita tra unu el ili videblas tra la alia:

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

$x = 20;
say $y; # 20

Ĉi tie $y := $x ne kopias la valoron 10. Ĝi faras $y alia nomo por la sama ujo kiel $x. Kiam $x poste ricevas 20, legi $y ankaŭ redonas 20.

Komparu tion kun ordinara atribuo, kiu kopias la valoron en apartan ujon:

my $x = 10;
my $y = $x; # simpla kopio

$x = 20;
say $y; # 10

Ligado funkcias ankaŭ kun tabeloj. La jena faras @alias alia nomo por @data:

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

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

Ankoraŭ unu detalo: se vi ligas nomon rekte al literala valoro, ne estas ujo malantaŭ ĝi, do la nomo fariĝas nur-legebla:

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

Kursa navigado

Kvizo — Tabeloj kaj listoj   |   Platigo kaj ero-igo


💪 Aŭ iru rekte al la ekzercoj de ĉi tiu sekcio.