Tracks
/
Gleam
Gleam
/
Übungen
/
Schatztruhe
Schatztruhe

Schatztruhe

Lernübung

Einführung

Generics

Ein Typ ist ein generischer Typ, wenn er Werte jedes Typs über einen Typparameter enthalten kann.

Zum Beispiel hat dieser Typ Box den Typparameter a (geschrieben mit Kleinbuchstaben).

pub type Box(a) {
  Box(a)
}

Der Typparameter a ist ein Platzhalter für jeden Typ, also kann Box mit Strings, Ganzzahlen oder jedem anderen Typ verwendet werden.

Box("Hello, Joe!") // The type is Box(String)

Box(42) // The type is Box(Int)

Ein Typ kann mehrere Typparameter haben, die du durch Kommas trennst.

pub type Pair(a, b) {
  Pair(a, b)
}

Generische Funktionen

Typparameter können auch in den Argumenten von Funktionen verwendet werden.

Diese Funktion nimmt einen Wert vom Typ a und ruft zweimal eine Funktion auf, die ein a nimmt und ein b zurückgibt.

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)

Anleitung

In dieser Übung schreibst du eine generische (/ magische!) TreasureChest, um ein paar Schätze zu lagern.

1. Definiere den generischen benutzerdefinierten Typ TreasureChest

Definiere einen benutzerdefinierten Typ TreasureChest mit einer einzigen Variante.

Die Variante sollte einen zugeordneten String-Wert haben, der zum Speichern des Passworts der Schatztruhe verwendet wird.

Die Variante sollte außerdem einen zugeordneten generischen Wert haben, der zum Speichern des Schatzes verwendet wird. Dieser Wert ist generisch, damit der Schatz alles sein kann.

2. Definiere den Typ UnlockResult

Definiere einen benutzerdefinierten Typ UnlockResult mit zwei Varianten.

Die erste Variante sollte Unlocked heißen und einen generischen Wert enthalten, der zum Speichern des Schatzes verwendet wird.

Die zweite Variante sollte WrongPassword heißen und keine Werte enthalten.

3. Definiere die Funktion get_treasure

Diese Funktion sollte zwei Parameter entgegennehmen

  • einen generischen benutzerdefinierten Typ TreasureChest
  • einen String (zum Ausprobieren eines Passworts)

Diese Funktion sollte das übergebene Passwort mit dem String in der TreasureChest abgleichen.

Die Funktion sollte ein UnlockResult zurückgeben.

Wenn die Passwörter übereinstimmen, gib Unlocked mit dem generischen Wert aus der TreasureChest zurück (dem Schatz!).

Wenn die Passwörter nicht übereinstimmen, gib WrongPassword zurück.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Gleam Exercism

Bereit, mit Schatztruhe zu starten?

Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.