Menu
Coddy logo textTech

Closure con parametri

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

Sebbene le chiusure che non accettano parametri siano utili, nella maggior parte dei casi vorrai passare dati alle chiusure per renderle più flessibili e potenti. Aggiungere parametri alle chiusure segue lo stesso schema che hai imparato in precedenza, ma con i valori all'interno delle barre verticali.

Ecco come definisci una closure che accetta un parametro:

let add_one = |x: i32| x + 1;

Nota che il parametro x va tra le barre verticali, proprio come i parametri di una funzione. Puoi quindi chiamare questa chiusura passando un valore:

let add_one = |x: i32| x + 1;
let result = add_one(5); // result è 6

Per le closure con più parametri, separali con le virgole:

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result è 12
challenge icon

Sfida

Facile

Riceverai due input. Il primo input è un numero e anche il secondo input è un numero. Crea una closure che accetta due parametri e calcola la potenza (il primo parametro elevato al secondo). Memorizza la closure in una variabile, chiamala con i valori di input e stampa il risultato.

Requisiti:

  • Leggi il primo input (numero di base) e rimuovi gli spazi bianchi
  • Esegui il parsing in i32
  • Leggi il secondo input (esponente) e rimuovi gli spazi bianchi
  • Esegui il parsing in u32
  • Crea una closure con due parametri che calcola la potenza usando il metodo .pow()
  • Memorizza la closure in una variabile
  • Chiama la closure con entrambi i valori di input
  • Stampa il risultato

Input:

  • Prima riga: un numero di base (ad esempio, 2)
  • Seconda riga: un esponente (ad esempio, 3)

Output:

  • Il risultato del calcolo della potenza

Provalo tu

use std::io;

fn main() {
    // Leggi il primo input (numero base)
    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");
    
    // Leggi il secondo input (esponente)
    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: Crea una closure che calcoli la potenza e memorizzala in una variabile
    // TODO: Chiama la closure con base ed exponent
    
    // Stampa il risultato
    println!("{}", result);
}
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