Domknięcia z parametrami
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 61 z 66.
Chociaż domknięcia, które nie przyjmują żadnych parametrów, są przydatne, przez większość czasu będziesz chcieć przekazywać dane do domknięć, aby uczynić je bardziej elastycznymi i potężniejszymi. Dodawanie parametrów do domknięć odbywa się według tego samego wzorca, którego nauczyłeś się wcześniej, ale z wartościami wewnątrz pionowych kresek.
Oto jak definiujesz domknięcie, które przyjmuje jeden parametr:
let add_one = |x: i32| x + 1;Zauważ, że parametr x znajduje się między pionowymi kreskami, tak jak parametry funkcji. Następnie możesz wywołać to domknięcie, przekazując wartość:
let add_one = |x: i32| x + 1;
let result = add_one(5); // result wynosi 6W przypadku funkcji domknięcia z wieloma parametrami oddziel je przecinkami:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result wynosi 12Wyzwanie
ŁatwyOtrzymasz dwa dane wejściowe. Pierwsze to liczba, a drugie również jest liczbą. Utwórz domknięcie, które przyjmuje dwa parametry i oblicza potęgę (pierwszy parametr podniesiony do potęgi równej drugiemu parametrowi). Zapisz domknięcie w zmiennej, wywołaj je z wartościami wejściowymi i wypisz wynik.
Wymagania:
- Wczytaj pierwsze dane wejściowe (podstawę potęgi) i usuń białe znaki
- Przekonwertuj je na
i32 - Wczytaj drugie dane wejściowe (wykładnik) i usuń białe znaki
- Przekonwertuj je na
u32 - Utwórz domknięcie z dwoma parametrami, które oblicza potęgę za pomocą metody
.pow() - Zapisz domknięcie w zmiennej
- Wywołaj domknięcie z obiema wartościami wejściowymi
- Wypisz wynik
Dane wejściowe:
- Pierwszy wiersz: liczba będąca podstawą potęgi (np.
2) - Drugi wiersz: wykładnik (np.
3)
Wynik:
- Wynik obliczenia potęgi
Spróbuj swoich sił
use std::io;
fn main() {
// Odczytaj pierwszą wartość wejściową (podstawę potęgi)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// Odczytaj drugą wartość wejściową (wykładnik)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: Utwórz domknięcie obliczające potęgę i zapisz je w zmiennej
// TODO: Wywołaj domknięcie z argumentami base i exponent
// Wypisz wynik
println!("{}", result);
}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ę Book7Obsługa błędów za pomocą „Result”
Czym jest „Result”?Używanie „match” z „Result”is_ok() i is_err()Skróty: unwrap i expectOperator znaku zapytania „?”Konwertowanie ciągów znaków na liczbyPodsumowanie — bezpieczna funkcja dzielenia10Domknięcia i funkcje anonimowe
Czym jest domknięcie?Definiowanie prostego domknięciaDomknięcia z parametramiPrzechwytywanie środowiskaPodsumowanie — proste domknięcie dodające2Wprowadzenie 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