Menu
Coddy logo textTech

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 15
challenge icon

Wyzwanie

Łatwy

Otrzymasz 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);
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator Rust online