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 è 6Per le closure 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 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);
}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'Cicli come espressioniRipasso - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi delle structStruct mutabiliStruct come parametri di funzioneStruct tuplaRiepilogo - Creare 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 per sommare semplicemente2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreIterare su un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker dei punteggi di base5Coppie chiave-valore con mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriScorrere una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: inventario semplice degli articoli
Configurazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere tutto insieme3Lista di attività da riga di comando
Configurazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finaleEsercitati da solo: Compilatore Rust online