Č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
filter() vyhodnotí logickú podmienku pre každú položku a vráti nový zoznam pôvodných položiek, ktoré vyhoveli. Čísla JSON vstupujú do tohto cvičiska ako double, ale zvyšok po delení % prijíma celé čísla. Výraz JSON preto každú hodnotu explicitne prevedie pomocou int(number). Samostatný zoznam celých čísel konverziu nepotrebuje.
Prečítajte pripravený príklad
Pravidlo v režime CEL + JSON je:
numbers.filter(number, int(number) % 2 == 0)Jeho vstup je:
{
"numbers": [1, 2, 3, 4, 5, 6]
}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
- Pri každom čísle sa kontroluje zvyšok 0 po delení dvoma.
- Podmienku spĺňajú iba 2, 4 a 6.
- Výsledkom je nový zoznam s tromi položkami.
Vaša úloha
- Spustite oba režimy a porovnajte zobrazené číselné typy.
- Zmeňte deliteľa z 2 na 3.
- Pridajte do vstupu 9 a pred spustením predpovedzte nový výsledok.
Očakávané pozorovanie: Pri deliteľovi 3 vyhovujú hodnoty 3, 6 a pridaná 9.
Častá chyba
filter() hodnoty netransformuje. Konverzia je iba súčasťou podmienky; vyhovujúce hodnoty JSON zostanú vo výsledku typu double.
Zobraziť vysvetlenie
Cvičisko mapuje čísla JSON na double, ale operátor % je definovaný pre celočíselné typy.
Kontrolná otázka
Prečo verzia s JSON používa int(number)?
Hlavná myšlienka
Makro filter() vyberá pôvodné položky. Konverziu potrebnú v podmienke zapíšte explicitne.
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.