ListMap

Jde o speciální typ, který je hodnotou výrazu []. Je možné k němu přistupovat jako k sekvenci i jako ke struktuře.

Typ nerozšiřuje ani kolekci, ani mapu. Jeho chování v TFS je odlišné od obou těchto typů.

Podstatným důsledkem toho, že interně nejde o mapu, je, že řada rozšiřujících funkcí a programátorských rozšíření nebude s hodnotami tohoto typu pracovat správně nebo vůbec. To se týká například funkce linkTail (aktuálně v jNetPublish 3.4.18).

Získání hodnoty v TFS

Jde o hodnotu výrazu tvaru [ posloupnost položek ], kde položky v posloupnosti jsou buď výrazy, nebo páry tvaru klíč = hodnota. Klíče jsou řetězce, zapisují se bez uvozovek.

Příklad: Konstrukce sekvence/struktury
Vstup
{["a", "b", k="c"]}

Výsledný objekt si lze představit jako posloupnost hodnot, z nichž některé jsou přístupné nejen pod svým indexem, ale také pod určeným klíčem.

Vypsání hodnoty

Není definovaný žádný formát výpisu.

Selekce podhodnoty

Pro všechny klíče kromě "_mapping" vrací hodnotu asociovanou s daným klíčem.

Příklad: Selekce podle klíče
Vstup
{["a", "b", k="c"].k}
Výstup
c

Má také následující vlastnost s vyhrazeným jménem:

_mapping
Vrací objekt, přes který lze iterovat jako přes mapu. Do iterace jsou zahrnuté jen položky s nastaveným klíčem. V každém průchodu cyklem vrací položku mapy. Vrácený objekt je určený jen pro použití v sekvenčním zpracování; jeho chování v jiných kontextech není definováno.
Příklad: Iterace přes mapu hodnot s nastaveným klíčem
Vstup
{while ["a", "b", k="c"]._mapping}
Klíč:    {_.key}
Hodnota: {_.value}
{/while}
Výstup
Klíč:    k
Hodnota: c

Mapování

Při mapování se chová odlišně podle toho, zda zadaný klíč je řetězec nebo celé číslo.

  • Pokud je klíč celé číslo n, vrací n-tou hodnotu.
  • Pokud je klíč řetězec, chová se při mapování stejně jako při selekci podhodnoty.
Příklad: Mapování, porovnání se selekcí podhodnoty
Vstup
Mapování (index):   {["a", "b", k="c"][2]}
Mapování (řetězec): {["a", "b", k="c"]["k"]}
Selekce:            {["a", "b", k="c"].k}
Výstup
Mapování (index):   c
Mapování (řetězec): c
Selekce:            c

Sekvenční zpracování

Chová se jako posloupnost svých hodnot, případné klíče jsou tedy v cyklu zcela ignorovány.

Příklad: Iterace přes seznam hodnot
Vstup
{while ["a", "b", k="c"]}
Hodnota: {_}
{/while}
Výstup
Hodnota: a
 
Hodnota: b
 
Hodnota: c

Pokud je žádoucí dosáhnout iterace přes položky mapy, lze použít podhodnotu _mapping. Příklad je uvedený výše.

Převod na logickou hodnotu

Vyhodnocuje se jako false, pokud je objekt prázdný, to znamená, že neobsahuje žádnou hodnotu. Jinak se vyhodnotí jako true.

Příklad: Převod na logickou hodnotu
Vstup
Prázdný objekt:   {if [] true else false /if}
Neprázdný objekt: {if [""] true else false /if}
Výstup
Prázdný objekt:   false
Neprázdný objekt: true
Pro vložení příspěvku do diskuse se přihlašte.