Tippek az Unison helyi használatához az Exercism CLI-n keresztül
Az Unison-kódot .u kiterjesztésű fájlokban írod. Ezeket „scratch” fájloknak hívjuk, mert bennük írod az Unison-kódot, de a tartalmat végső soron a Unison Codebase Manager (UCM) tárolja és menti el ezekben a fájlokban. A fájlokat továbbra is az Exercism CLI-n keresztül küldöd be, de a UCM tekinthető a Unison-kód „hiteles forrásának”.
Bár a Unisonnak nincs REPL-je (olvasás-kiértékelés-kiírás ciklus), az Unison-kifejezéseket gyorsan kiértékelheted „watch expression”-ök segítségével. A .u kiterjesztésű fájlodban kezdd a sort > jellel, és tőle jobbra írd be a kifejezést.
> myFunction 42 "hi"
A UCM a fájl mentésekor megmutatja a kifejezés kiértékelésének eredményét. Ezt akkor használhatod, amikor a feladatmegoldásaidat hibakeresed.
Ha egy részletesebb Exercism-munkafolyamatra vágysz, itt van egy végigvezető videó egy Exercism-feladat megvalósításáról és teszteléséről.
A végigvezető videó a Unison régebbi verziójának munkafolyamatát mutatja be. Az új munkafolyamatot itt találod, az új projektmunkafolyamattal együtt.
A Unison-kódbázis „névterek” szerint szerveződik. A névterek kicsit hasonlítanak a fájlrendszer könyvtáraihoz, azzal a különbséggel, hogy nem fájlokat, hanem a Unison-típusaidat és -függvényeidet tartalmazzák. A névtérútvonalakat pontok, . választják el. Például a base névtérben lévő Text névtérre így hivatkozhatunk: base.Text.
Azt javasoljuk, hogy minden feladathoz, amit megoldasz, hozz létre egy névteret, vagy cd-zz bele.
A Unison importok kezelésére és megadására szolgáló szintaxisa a use szintaxis. Például a use base.data.List a base.data.List névtér összes függvényét behozza a scope-ba. Ez hasznos lehet olyankor, amikor egy List-en használsz egy map-szerű függvényt, amelyet meg kell különböztetni más map függvényektől, például az Optional.map-tól. Egyes függvényeket külön is importálhatsz úgy, hogy a névtér után szóközzel elválasztott függvénylistát írsz, amit a scope-ba szeretnél behozni, például: use base.data.List tails head flatMap.
A use szintaxist használhatod egy fájl legfelső szintjén és függvényeken belül is az importok megadására. A use záradékok tiszteletben tartják a lexikális scope szabályait, így a mélyebben beágyazott importok elsőbbséget élveznek a kevésbé beágyazottakkal szemben.
A Unison standard könyvtárát base-nek hívják. Alapértelmezés szerint az új Unison-kódbázisokba le van töltve. Az implementációidhoz elérhető függvényeket böngészheted az Unison-kód online repozitóriumán, a Unison Share oldalon, vagy a helyi kódbázisfelületen, vagy kereshetsz a Unison Codebase Manager (UCM) segítségével. Mindjárt ki is térünk rá.
A UCM-parancsok teljes listáját úgy érheted el, ha beírod a help parancsot a UCM-ben, de íme néhány tipp és bevett szokás.
A UCM-ben a find paranccsal kereshetsz terminusokat név vagy névtér-előtag szerint, de a find a kódbázis típus alapú keresését is támogatja. Egy függvény típus-aláírás szerinti kereséséhez írd be a find parancsot, utána egy szóközt és egy kettőspontot, például: find : [a] -> [[a]].
Egy névtér tartalmát az ls paranccsal listázhatod, például ls base.data.List vagy ls .exercism.helloWorld. A UCM számos parancsa elfogad relatív névtérútvonal-argumentumokat és teljesen minősített névtér-argumentumokat is. A teljesen minősített útvonalak egy . jellel kezdődnek, amely a kódbázisod „gyökerét” jelöli.
A UCM-ben a cd paranccsal mozoghatsz a parancssori felületen. Ha egy névtér nem létezik, a cd létrehozza, amikor oda navigálsz. Egy névtérrel feljebb a cd .. paranccsal léphetsz.
Amikor betöltöm a teszteket, a UCM nem találja a feladatmegoldásomat.
Győződj meg róla, hogy elmented a stub fájlodat a szövegszerkesztődben, és az update paranccsal frissíted a terminusokat a kódbázisodban, mielőtt betöltöd a teszteket.
Névütközésekbe ütközöm. Nem lehet két tests nevű terminusom.
Két azonos nevű terminusod lehet különböző névterekben. Ha Exercism-feladatokat oldasz meg, érdemes minden feladathoz külön névteret létrehozni, hogy a tesztek és a stubok elkülönüljenek a többitől.
A tesztjeim helyben átmennek, de a tesztfuttatón nem mennek át.
Elnézést érte! Először ellenőrizd, hogy az importjaid semmi másra nem hivatkoznak, csak a standard könyvtárra, base-re és a tesztelt scratch fájlban definiált függvényekre. Ha ez a helyzet, jelezd nekünk az Exercism #track-unison Slack-csatornáján, vagy nyiss egy issue-t a Unison-kurzus repójában.
Ha bármilyen problémád adódik, jelezd nekünk! 🙂