Čo budete robiť
Pripravený výraz spustíte v cvičisku vyššie, budete meniť vždy jeden vstup a vysvetlíte výsledok. Začnite v režime Iba CEL a potom rovnaké pravidlo zopakujte v režime CEL + JSON.
Ako to funguje
exists_one() spočíta položky, pre ktoré je podmienka pravdivá, a uspeje iba pri počte presne jedna. Je prísnejšie než exists(): nula zhôd aj dve zhody vrátia nepravdu. Podmienka v príklade číta logickú položku active z každej mapy.
Prečítajte pripravený príklad
Pravidlo v režime CEL + JSON je:
approvers.exists_one(person, person.active)Jeho vstup je:
{
"approvers": [
{ "name": "A", "active": false },
{ "name": "B", "active": true }
]
}Záložka Iba CEL obsahuje hodnoty aj pravidlo v jednom výraze. Povolené rozšírenie cel.bind() udrží každý názov lokálny v jeho poslednom argumente.
Vyhodnotenie krok za krokom
- Osoba A má
active: false. - Osoba B má
active: true. - Pravdivý je presne jeden výsledok, preto
exists_one()vrátitrue.
Vaša úloha
- Spustite príklad.
- Nastavte obe osoby ako neaktívne.
- Potom nastavte obe ako aktívne a porovnajte dva nepravdivé výsledky.
Očakávané pozorovanie: Nula aktívnych osôb aj dve aktívne osoby porušia požiadavku presne jednej zhody.
Častá chyba
Nepoužívajte exists_one(), keď pravidlo znamená „aspoň jedna“. Toto makro vyjadruje počet, nie iba prítomnosť.
Zobraziť vysvetlenie
exists_one() vráti false; exists() vráti true.
Kontrolná otázka
Ako sa líši exists_one() od exists(), keď vyhovujú dve položky?
Hlavná myšlienka
Makro exists_one() použite iba vtedy, keď je jedinečnosť súčasťou pravidla.
Zdroje
CEL-DEV— oficiálny prehľad CEL.CEL-LANG— oficiálna definícia jazyka CEL.CEL-GO-BIND— oficiálna dokumentácia voliteľného rozšíreniacel.bind()použitého v samostatnej záložke.