Przechwytywanie środowiska
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 62 z 66.
Jedną z najpotężniejszych cech domknięć jest ich zdolność do przechwytywania zmiennych z otoczenia i korzystania z nich. W przeciwieństwie do zwykłych funkcji, domknięcia mogą „widzieć” zmienne istniejące w tym samym zakresie, w którym zostały zdefiniowane, i uzyskiwać do nich dostęp.
Oto jak działa przechwytywanie środowiska:
fn main() {
let x = 10;
let my_closure = || {
println!("The value of x is: {}", x);
};
my_closure(); // To wypisze "The value of x is: 10"
}W tym przykładzie domknięcie przechwytuje zmienną x z otaczającego zakresu i używa jej wewnątrz swojego ciała. Nie trzeba przekazywać x jako parametru do domknięcia — ma ono do niej dostęp automatycznie.
Możesz także przechwytywać zmienne i używać ich w obliczeniach:
let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // result wynosi 15Wyzwanie
ŁatwyOtrzymasz dwa wejścia. Pierwsze wejście to liczba reprezentująca cenę bazową. Drugie wejście to liczba reprezentująca procent rabatu. Utwórz domknięcie, które przechwytuje procent rabatu ze środowiska i oblicza cenę końcową po zastosowaniu rabatu. Wywołaj domknięcie z ceną bazową i wypisz cenę końcową.
Wymagania:
- Odczytaj pierwsze wejście (cenę bazową) i usuń białe znaki
- Przekształć je na
f64 - Odczytaj drugie wejście (procent rabatu) i usuń białe znaki
- Przekształć je na
f64 - Utwórz domknięcie, które przyjmuje jeden parametr (cenę bazową) i przechwytuje procent rabatu z otaczającego środowiska
- Domknięcie powinno obliczyć cenę końcową za pomocą wzoru:
base_price - (base_price * discount / 100.0) - Wywołaj domknięcie z ceną bazową
- Wypisz cenę końcową
Wejście:
- Pierwszy wiersz: cena bazowa (np.
100.0) - Drugi wiersz: procent rabatu (np.
20.0)
Wyjście:
- Cena końcowa po zastosowaniu rabatu
Spróbuj swoich sił
use std::io;
fn main() {
// Wczytaj cenę bazową
let mut base_price_input = String::new();
io::stdin().read_line(&mut base_price_input).expect("Failed to read line");
let base_price: f64 = base_price_input.trim().parse().expect("Invalid number");
// Wczytaj procent rabatu
let mut discount_input = String::new();
io::stdin().read_line(&mut discount_input).expect("Failed to read line");
let discount: f64 = discount_input.trim().parse().expect("Invalid number");
// TODO: Utwórz domknięcie, które przechwytuje rabat i oblicza cenę końcową
// TODO: Wywołaj domknięcie z ceną bazową
// Wyświetl cenę końcową
// println!("{}", final_price);
}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