Veränderbare Structs
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 23 von 66.
Standardmäßig sind Struct-Instanzen in Rust unveränderlich – sobald man sie erstellt hat, kann man ihre Feldwerte nicht mehr ändern. Wie bei anderen Variablen auch, kann man eine Struct-Instanz jedoch veränderlich machen, indem man bei der Deklaration das Schlüsselwort mut hinzufügt.
Wenn Sie eine Struct-Instanz als veränderbar (mutable) deklarieren, können Sie jedes ihrer Felder mithilfe der Punktnotation ändern:
let mut player = Player {
name: String::from("Alice"),
score: 0,
};
player.score = 100; // Dies funktioniert, weil player veränderbar istOhne das Schlüsselwort mut würde der Versuch, ein Feld zu ändern, zu einem Kompilierungsfehler führen. Die Veränderbarkeit bezieht sich auf die gesamte Struct-Instanz – man kann nicht einzelne Felder veränderbar machen, während andere unveränderbar bleiben.
Aufgabe
EinfachSie erhalten vier Eingaben: einen Spielernamen, eine Anfangspunktzahl (als Ganzzahl), eine hinzuzufügende Bonuszahl (als Ganzzahl) und eine abschließende Punktanpassung (als Ganzzahl). Definieren Sie eine Player-Struktur mit zwei Feldern: name vom Typ String und score vom Typ i32. Erstellen Sie eine veränderbare Instanz dieser Struktur und ändern Sie dann das score-Feld mehrmals unter Verwendung der Eingabewerte.
Anforderungen:
- Definieren Sie eine
Player-Struktur mit den Feldern:name: Stringundscore: i32 - Lesen Sie die erste Eingabe als Spielernamen ein
- Lesen Sie die zweite Eingabe ein und konvertieren Sie diese in
i32für die Anfangspunktzahl - Erstellen Sie eine veränderbare Instanz der
Player-Struktur mit diesen Werten - Lesen Sie die dritte Eingabe ein und konvertieren Sie diese in
i32für die Bonuszahl - Addieren Sie die Bonuszahl zur aktuellen Punktzahl des Spielers unter Verwendung der Punktnotation
- Lesen Sie die vierte Eingabe ein und konvertieren Sie diese in
i32für die abschließende Anpassung - Addieren Sie die abschließende Anpassung zur aktuellen Punktzahl des Spielers
- Geben Sie die Spielerinformationen in dem unten gezeigten exakten Format aus
Eingabe:
- Erste Zeile: Spielername (z. B.
Alice) - Zweite Zeile: Anfangspunktzahl als Ganzzahl (z. B.
50) - Dritte Zeile: Bonuszahl als Ganzzahl (z. B.
30) - Vierte Zeile: Abschließende Anpassung als Ganzzahl (z. B.
20)
Ausgabe:
- Erste Zeile:
Player: [name] - Zweite Zeile:
Final Score: [score]
Spickzettel
Struct-Instanzen in Rust sind standardmäßig unveränderlich. Um Feldwerte nach der Erstellung zu ändern, deklarieren Sie die Instanz mit dem Schlüsselwort mut als veränderlich:
let mut player = Player {
name: String::from("Alice"),
score: 0,
};
player.score = 100; // Feld mit Punktnotation ändernDie Veränderlichkeit bezieht sich auf die gesamte Struct-Instanz – es ist nicht möglich, einzelne Felder als veränderlich zu deklarieren, während andere unveränderlich bleiben.
Probier es selbst
use std::io;
// TODO: Definieren Sie hier das Player-Struct mit den Feldern name und score
fn main() {
// Spielername lesen
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
// Anfangspunktzahl lesen
let mut initial_score = String::new();
io::stdin().read_line(&mut initial_score).expect("Failed to read line");
let initial_score: i32 = initial_score.trim().parse().expect("Invalid number");
// Bonuspunkte lesen
let mut bonus = String::new();
io::stdin().read_line(&mut bonus).expect("Failed to read line");
let bonus: i32 = bonus.trim().parse().expect("Invalid number");
// Finale Anpassung lesen
let mut adjustment = String::new();
io::stdin().read_line(&mut adjustment).expect("Failed to read line");
let adjustment: i32 = adjustment.trim().parse().expect("Invalid number");
// TODO: Erstellen Sie eine veränderbare Player-Instanz
// TODO: Addieren Sie die Bonuspunkte zur Punktzahl des Spielers
// TODO: Addieren Sie die finale Anpassung zur Punktzahl des Spielers
// TODO: Geben Sie die Ausgabe im erforderlichen Format aus
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code