Menu
Coddy logo textTech

Acquisire l’ambiente

Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 62 di 66.

Una delle funzionalità più potenti delle chiusure è la loro capacità di acquisire e usare variabili dall'ambiente circostante. A differenza delle funzioni normali, le chiusure possono «vedere» e accedere alle variabili che esistono nello stesso ambito in cui sono definite.

Ecco come funziona la cattura dell'ambiente:

fn main() {
    let x = 10;
    
    let my_closure = || {
        println!("The value of x is: {}", x);
    };
    
    my_closure(); // Questo stamperà "The value of x is: 10"
}

In questo esempio, la chiusura acquisisce la variabile x dall'ambito circostante e la usa al suo interno. Non è necessario passare x come parametro alla chiusura: vi ha accesso automaticamente.

Puoi anche acquisire variabili e usarle nei calcoli:

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // result è 15
challenge icon

Sfida

Facile

Riceverai due input. Il primo input è un numero che rappresenta un prezzo base. Il secondo input è un numero che rappresenta una percentuale di sconto. Crea una closure che acquisisca dall’ambiente la percentuale di sconto e calcoli il prezzo finale dopo aver applicato lo sconto. Chiama la closure con il prezzo base e stampa il prezzo finale.

Requisiti:

  • Leggi il primo input (prezzo base) e rimuovi gli spazi bianchi
  • Converti il valore in f64
  • Leggi il secondo input (percentuale di sconto) e rimuovi gli spazi bianchi
  • Converti il valore in f64
  • Crea una closure che accetti un parametro (il prezzo base) e acquisisca la percentuale di sconto dall’ambiente circostante
  • La closure dovrebbe calcolare il prezzo finale usando la formula: base_price - (base_price * discount / 100.0)
  • Chiama la closure con il prezzo base
  • Stampa il prezzo finale

Input:

  • Prima riga: un prezzo base (ad es., 100.0)
  • Seconda riga: una percentuale di sconto (ad es., 20.0)

Output:

  • Il prezzo finale dopo aver applicato lo sconto

Provalo tu

use std::io;

fn main() {
    // Leggi il prezzo base
    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");
    
    // Leggi la percentuale di sconto
    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: Crea una closure che acquisisca lo sconto e calcoli il prezzo finale
    // TODO: Chiama la closure con il prezzo base
    
    // Stampa il prezzo finale
    // println!("{}", final_price);
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online