Č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
Kolekčné makrá vytvoria dočasnú premennú pre každú položku. all(score, ...) vráti pravdu iba vtedy, keď každé skóre spĺňa podmienku. exists(score, ...) vráti pravdu, ak podmienku spĺňa aspoň jedno skóre. Pri prázdnom zozname je all() pravda a exists() nepravda.
Prečítajte pripravený príklad
Pravidlo v režime CEL + JSON je:
scores.all(score, score >= 50.0) && scores.exists(score, score >= 90.0)Jeho vstup je:
{
"scores": [72, 94, 81]
}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
- Každé skóre je aspoň
50.0. - Hodnota
94.0je aspoň90.0. - Výsledky oboch makier sú pravdivé, preto celý výraz vráti
true.
Vaša úloha
- Spustite príklad.
- Zmeňte
72na42a určte, ktoré makro zlyhá. - Hodnotu vráťte, zmeňte
94na84a určte druhé zlyhanie.
Očakávané pozorovanie: Skóre pod 50 spôsobí nepravdu v all(); odstránenie jediného skóre aspoň 90 spôsobí nepravdu v exists().
Častá chyba
Premenná score existuje iba vo vnútri podmienky makra. Po volaní makra nie je dostupná.
Zobraziť vysvetlenie
all() vráti true; exists() vráti false.
Kontrolná otázka
Čo vrátia [].all(x, x > 0) a [].exists(x, x > 0)?
Hlavná myšlienka
Na všeobecnú požiadavku použite all(), na aspoň jednu zhodu exists() a prázdnu kolekciu posúďte vedome.
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.