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.
{["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.
{["a", "b", k="c"].k}
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.
{while ["a", "b", k="c"]._mapping}
Klíč: {_.key}
Hodnota: {_.value}
{/while}
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.
Mapování (index): {["a", "b", k="c"][2]}
Mapování (řetězec): {["a", "b", k="c"]["k"]}
Selekce: {["a", "b", k="c"].k}
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.
{while ["a", "b", k="c"]}
Hodnota: {_}
{/while}
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
.
Prázdný objekt: {if [] true else false /if}
Neprázdný objekt: {if [""] true else false /if}
Prázdný objekt: false
Neprázdný objekt: true