Č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
Každá hodnota CEL má typ. V tomto príklade je user.name typu string, user.score je v režime JSON typu double a porovnanie vytvorí bool. Toto cvičisko mapuje čísla JSON na double, preto je hranica zapísaná ako 80.0. CEL potichu neprevedie reťazec "86" na číslo.
Prečítajte pripravený príklad
Pravidlo v režime CEL + JSON je:
user.name == 'Maya' && user.score >= 80.0Jeho vstup je:
{
"user": {
"name": "Maya",
"score": 86,
"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
user.name == 'Maya'sa vyhodnotí akotrue.user.score >= 80.0sa vyhodnotí akotrue.true && truevrátitrue.
Vaša úloha
- Spustite oba režimy a pozrite si typ výsledku.
- Zmeňte skóre v JSON na
79a výraz spustite znova. - Zapíšte skóre ako
"86", pozrite si chybu typu a potom úvodzovky odstráňte.
Očakávané pozorovanie: Skóre 79 vráti false; skóre v úvodzovkách spôsobí chybu nekompatibilných typov.
Častá chyba
Číslo z JSON a číslo priamo v samostatnom výraze môžu do cvičiska vstúpiť s odlišným číselným typom. Operandy musia mať zhodný typ alebo sa musia explicitne previesť.
Zobraziť vysvetlenie
"86" je reťazec. CEL nevykonáva automatickú konverziu reťazca na číslo.
Kontrolná otázka
Prečo "86" >= 80.0 zlyhá namiesto výsledku true?
Hlavná myšlienka
Typy sú súčasťou pravidla. Používajte kompatibilné operandy a konverzie zapisujte viditeľne.
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.