Closure con parametri
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 61 di 66.
Sebbene le closure che non accettano parametri siano utili, nella maggior parte dei casi vorrai passare dati alle tue closure per renderle più flessibili e potenti. Aggiungere parametri alle closure 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 closure passando un valore:
let add_one = |x: i32| x + 1;
let result = add_one(5); // result è 6Per le chiusure con più parametri, separali con le virgole:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result è 12Sfida
FacileRiceverai due input. Il primo input è un numero e anche il secondo input è un numero. Crea una closure che accetti due parametri e calcoli 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
- Converti il valore in
i32 - Leggi il secondo input (esponente) e rimuovi gli spazi bianchi
- Converti il valore in
u32 - Crea una closure con due parametri che calcoli 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 di 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);
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
L’espressione 'match'Corrispondenza di più valoriCorrispondenza di intervalliL’espressione 'if let'I cicli come espressioniRiepilogo - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi di una structStruct mutabiliLe struct come parametri di funzioneStruct tuplaRiepilogo - Crea una struct Book7Gestire gli errori con «Result»
Che cos’è «Result»?Usare «match» con «Result»is_ok() e is_err()Scorciatoie: unwrap ed expectL’operatore punto interrogativo «?»Convertire stringhe in numeriRiepilogo: funzione di divisione sicura10Closure e funzioni anonime
Che cos’è una closure?Definire una closure sempliceClosure con parametriAcquisire l’ambienteRiepilogo - Closure con sommatore semplice2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreScorrere un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker di punteggi di base5Coppie chiave-valore con le mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriIterare su una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: semplice inventario di articoli
Impostazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere insieme il tutto3Lista di cose da fare da riga di comando
Impostazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finaleEsercitati da solo: Compilatore Rust online