Kurzusok
/
Factor
Factor
/
Feladatok
/
Gyári védőháló
Gyári védőháló

Gyári védőháló

Tanulófeladat

Bevezetés

A Factor hibarendszere három részből áll: a throw a hiba jelzésére, a recover egy hiba kezelésére, az ERROR: pedig saját hibatípus definiálására.

throw

A throw (a kernel szótárban) hibát vált ki. Az argumentum bármilyen érték lehet (string, szám vagy tuple), és ez lesz a hiba, amit később megvizsgálhatsz:

! DOCTEST: SKIP
"file not found" throw

A throw nem tér vissza; az aktuális szó többi része kimarad.

recover

A recover (a continuations szótárban) a Factor try/catch mechanizmusa. Egy try és egy recovery quotationt vár:

recover ( try recovery -- )

Ha a try dobás nélkül befejeződik, a recovery figyelmen kívül marad. Ha a try dob, a hiba a verembe kerül, és a recovery lefut:

[ "boom" throw ] [ drop "caught" ] recover .
! => "caught"

[ "ok" ] [ drop "never runs" ] recover .
! => "ok"

A when (a kernel szótárból) a természetes társa: csak akkor futtat egy quotationt, ha a verem tetején lévő érték igaz értékű:

: check-positive ( n -- )
    0 < [ "negative!" throw ] when ;

ERROR:

Az ERROR: egy tuple osztályt és egy szót definiál, amely létrehoz egy friss példányt, és dobja azt:

! DOCTEST: SKIP
ERROR: not-found path ;

"/missing" not-found
! throws T{ not-found { path "/missing" } }

A slot nélküli hiba egyszerűen ERROR: name ;; a name meghívása egy üres példányt dob. Az ERROR: kulcsszóval definiált tuple-ok rendelkeznek egy name? osztálypredikátummal, amellyel tesztelheted, hogy egy elkapott hiba ilyen típusú volt-e.

A slotok visszaolvasása

Az elkapott hiba csupán egy tuple, így minden ERROR: slot ugyanazzal az automatikusan generált slot>> olvasóval rendelkezik, mint bármely más tuple.

! DOCTEST: SKIP
{
    T{ not-found { path "/a" } }
    T{ not-found { path "/b" } }
}
[ path>> ] map .   ! => { "/a" "/b" }

Utasítások

Elena, az újsággyár új minőségbiztosítási vezetője arra kér, hogy írj egy kis szoftvert a termelőterem felügyeletére.

1. Definiálj egy egyedi hibát

Definiálj egy machine-error hibatuple-osztályt az ERROR: feldolgozó szóval. Nem igényel slotokat.

machine-error   ! throws a fresh machine-error

2. Ellenőrizd a páratartalmat

Definiáld a check-humidity szót. Levesz a veremről egy páratartalom-értéket, és throw-val dobja a "humidity too high" stringet, ha az érték szigorúan nagyobb, mint 70. Egyébként nem ad vissza semmit.

50 check-humidity   ! returns nothing
80 check-humidity   ! throws "humidity too high"

3. Ellenőrizd a hőmérsékletet

Definiáld a check-temperature szót. Levesz egy hőmérséklet-értéket, és throw-val dobja a "temperature too high" stringet, ha az érték szigorúan nagyobb, mint 500. Egyébként nem ad vissza semmit.

400 check-temperature   ! returns nothing
600 check-temperature   ! throws "temperature too high"

4. Figyeld a gépet

Definiáld a monitor szót úgy, hogy levegyen a veremről egy páratartalmat és egy hőmérsékletet, és lefuttassa mindkét ellenőrzést. Ha valamelyik ellenőrzés dob, a monitor helyette egy friss machine-error-t dobjon. Ha mindkettő sikeres, a monitor nem ad vissza semmit.

50 400 monitor   ! returns nothing
80 400 monitor   ! throws a machine-error
50 600 monitor   ! throws a machine-error

5. Figyelj egy adag mérést

Definiáld a monitor-batch szót úgy, hogy levegyen a veremről egy { humidity temperature } mérésekből álló tömböt, és adja vissza, hány hibázna közülük (azaz hány okozná, hogy a monitor dob).

{ { 50 400 } { 80 400 } { 50 600 } { 60 200 } } monitor-batch .
! => 2
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Factor Exercism

Készen állsz elkezdeni a(z) Gyári védőháló feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.