Egy típus akkor generikus típus, ha egy típusparaméter segítségével bármilyen típusú értéket tartalmazhat.
Például ennek a Box típusnak az a a típusparamétere (kisbetűvel írva).
pub type Box(a) {
Box(a)
}
Az a típusparaméter bármilyen típus helyőrzője, így a Box használható stringekkel, int-ekkel vagy bármilyen más típussal.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Egy típusnak több típusparamétere is lehet, ezeket vesszővel választjuk el.
pub type Pair(a, b) {
Pair(a, b)
}
A típusparamétereket a függvények argumentumaiban is használhatjuk.
Ez a függvény egy a típusú értéket kap, és kétszer meghív egy olyan függvényt, amely egy a típusú értéket kap és egy b típusút ad vissza.
pub fn twice(value: a, f: fn(a) -> b) -> b {
f(value)
f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)
Ebben a feladatban egy generikus (varázslatos!) TreasureChest típust írsz, amelyben kincseket tárolhatsz.
Definiálj egy TreasureChest egyedi típust egyetlen variánssal.
A variánsnak legyen egy társított String értéke, amely a kincsesláda jelszavát tárolja majd.
A variánsnak emellett legyen egy társított generikus értéke is, amely a kincset tárolja majd. Ez az érték generikus, így a kincs bármi lehet.
Definiálj egy UnlockResult egyedi típust két variánssal.
Az első variáns az Unlocked legyen, és tartalmazzon egy generikus értéket, amely a kincset tárolja majd.
A második variáns a WrongPassword legyen, amely nem tárol értéket.
A függvény két paramétert vár:
TreasureChest generikus egyedi típustString értéket (a jelszó kipróbálásához)A függvény összehasonlítja a megadott jelszót a TreasureChest-ben tárolt String értékkel.
A függvény egy UnlockResult értéket ad vissza.
Ha a jelszavak megegyeznek, akkor az Unlocked variánst add vissza a TreasureChest-ben lévő generikus értékkel (a kincset!).
Ha a jelszavak nem egyeznek meg, akkor a WrongPassword variánst add vissza.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Gleam nyelvet 33 fogalom122 feladat segítségével, valódi emberi mentorálással, mindez ingyen.