Modyfikowalne struktury
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 23 z 66.
Domyślnie instancje struktur w Rust są niezmienne — po ich utworzeniu nie możesz zmieniać wartości ich pól. Jednak, podobnie jak w przypadku innych zmiennych, możesz uczynić instancję struktury zmienną, dodając słowo kluczowe mut podczas jej deklarowania.
Gdy zadeklarujesz mutowalną instancję struktury, możesz modyfikować dowolne jej pola za pomocą notacji kropkowej:
let mut player = Player {
name: String::from("Alice"),
score: 0,
};
player.score = 100; // To działa, ponieważ player jest modyfikowalnyBez słowa kluczowego mut próba zmiany pola spowodowałaby błąd kompilacji. Modyfikowalność dotyczy całej instancji struktury — nie możesz uczynić poszczególnych pól modyfikowalnymi, pozostawiając pozostałe niemodyfikowalne.
Wyzwanie
ŁatwyOtrzymasz cztery dane wejściowe: imię gracza, wynik początkowy (jako liczbę całkowitą), wynik bonusowy do dodania (jako liczbę całkowitą) oraz końcową korektę wyniku (jako liczbę całkowitą). Zdefiniuj strukturę Player z dwoma polami: name typu String oraz score typu i32. Utwórz mutowalną instancję tej struktury, a następnie kilkukrotnie zmodyfikuj pole wyniku, używając wartości wejściowych.
Wymagania:
- Zdefiniuj strukturę
Playerz polami:name: Stringorazscore: i32 - Odczytaj pierwsze dane wejściowe jako imię gracza
- Odczytaj drugie dane wejściowe i przekonwertuj je na
i32, aby uzyskać wynik początkowy - Utwórz mutowalną instancję struktury
Playerz tymi wartościami - Odczytaj trzecie dane wejściowe i przekonwertuj je na
i32, aby uzyskać wynik bonusowy - Dodaj wynik bonusowy do bieżącego wyniku gracza, używając notacji kropkowej
- Odczytaj czwarte dane wejściowe i przekonwertuj je na
i32, aby uzyskać końcową korektę - Dodaj końcową korektę do bieżącego wyniku gracza
- Wypisz informacje o graczu dokładnie w formacie pokazanym poniżej
Dane wejściowe:
- Pierwszy wiersz: imię gracza (np.
Alice) - Drugi wiersz: wynik początkowy jako liczba całkowita (np.
50) - Trzeci wiersz: wynik bonusowy jako liczba całkowita (np.
30) - Czwarty wiersz: końcowa korekta jako liczba całkowita (np.
20)
Dane wyjściowe:
- Pierwszy wiersz:
Player: [name] - Drugi wiersz:
Final Score: [score]
Spróbuj swoich sił
use std::io;
// TODO: Zdefiniuj tutaj strukturę Player z polami name i score
fn main() {
// Wczytaj imię gracza
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
// Wczytaj początkowy wynik
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");
// Wczytaj punkty bonusowe
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");
// Wczytaj końcową korektę wyniku
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: Utwórz modyfikowalną instancję Player
// TODO: Dodaj punkty bonusowe do wyniku gracza
// TODO: Dodaj końcową korektę do wyniku gracza
// TODO: Wypisz wynik w wymaganym formacie
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online