Kurso de Raku / Progresinta / Ujoj / Ordigitaj ujoj
Platigo kaj ero-igo
Kiam vi metas unu tabelon en alian, Raku ne aŭtomate kunfandas iliajn elementojn. Ekzamenu la jenan programon:
my @a = 1, 2, 3;
my @b = 4, 5;
my @c = @a, @b;
say @c.elems; # 2
say @c; # [[1 2 3] [4 5]]La tabelo @c havas nur du elementojn: la tabelojn
@a kaj @b. Raku konservas ĉiun ujon kiel
unuopan eron anstataŭ disverŝi ĝian enhavon en la eksteran tabelon. La
samo okazas por valoro metita inter aliajn:
my @a = 1, 2, 3;
my @d = 0, @a, 99;
say @d; # [0 [1 2 3] 99]Kiam vi efektive volas unu solan platan sekvencon, petu ĝin
eksplicite per la rutino flat:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat(@a, @b); # (1 2 3 4 5)
say flat(@a, @b).elems; # 5Ero-igo
Foje vi volas la malon: protekti ujon kontraŭ platigo, eĉ ene de
flat. La konstruo $(...) ero-igas
sian argumenton — ĝi markas la rezulton kiel unuopan eron. Komparu la
antaŭan ekzemplon kun ĉi tiu:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat($(@a), @b); # ([1 2 3] 4 5)Ĉi tie $(@a) konservas @a kiel unu
elementon, dum @b ankoraŭ estas platigita en siajn du
valorojn. Jen denove la ideo de la sigelo $: $
signifas «traktu ĉi tion kiel unu solan aĵon».
Praktiko
Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.
Kursa navigado
← Ligado per
:= | Kvizo — Nestitaj
tabeloj →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.