Il metodo expect
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 39 di 66.
Anche se .unwrap() fa il suo dovere, ha un grosso svantaggio: quando genera un panic su un None, il messaggio di errore è generico e poco utile. È qui che .expect() viene in soccorso.
Il metodo .expect() funziona esattamente come .unwrap() - estrae il valore da un Some e va in panico su un None. La differenza fondamentale è che .expect() ti permette di fornire un messaggio di panico personalizzato:
let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);Se Option contiene un Some, .expect() restituisce il valore interno proprio come .unwrap(). Ma se è un None, invece di un messaggio di panico generico, vedrai il tuo messaggio personalizzato, rendendo molto più facile capire cosa è andato storto e dove.
Sfida
FacileRiceverai due input. Il primo input è un nome di prodotto e il secondo indica se il prodotto è disponibile (yes) o esaurito (no). Crea un Option<String> che contenga Some(product_name) se il prodotto è disponibile, oppure None se è esaurito. Usa .expect() con un messaggio descrittivo per estrarre il nome del prodotto e stamparlo.
Requisiti:
- Leggi il primo input (nome del prodotto) e rimuovi gli spazi bianchi
- Leggi il secondo input (stato delle scorte) e rimuovi gli spazi bianchi
- Crea una variabile
Option<String>:- Se lo stato delle scorte è
yes, assegnaSome(product_name.to_string()) - Se lo stato delle scorte è
no, assegnaNone
- Se lo stato delle scorte è
- Usa
.expect()con il messaggio"Product should be in stock"per estrarre il nome del prodotto - Stampa il nome del prodotto estratto nel formato:
Product available: [product_name]
Input:
- Prima riga: un nome di prodotto (ad es.
Laptop) - Seconda riga:
yesoppureno
Output:
- Se lo stato delle scorte è
yes:Product available: [product_name] - Se lo stato delle scorte è
no: il programma genererà un panic con il messaggio personalizzato "Product should be in stock" (questo è il comportamento previsto per questa sfida)
Nota: Quando lo stato delle scorte è no, chiamare .expect() su None causerà un panic con il tuo messaggio personalizzato. Questo dimostra come .expect() fornisca informazioni sugli errori più utili rispetto a .unwrap().
Provalo tu
use std::io;
fn main() {
// Leggi il nome del prodotto
let mut product_name = String::new();
io::stdin().read_line(&mut product_name).expect("Failed to read line");
let product_name = product_name.trim();
// Leggi lo stato delle scorte
let mut stock_status = String::new();
io::stdin().read_line(&mut stock_status).expect("Failed to read line");
let stock_status = stock_status.trim();
// TODO: Scrivi il tuo codice qui sotto
// Crea un Option<String> in base a stock_status
// Usa .expect() per estrarre il nome del prodotto
// Stampa il risultato nel formato: Product available: [product_name]
}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 Book2Introduzione 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 finale6Gestire l'assenza con 'Option'
Che cos'è un 'Option'?Usare 'match' con 'Option'is_some() e is_none()Estrarre il valore da un 'Option'Il metodo expectFornire un valore predefinito: unwrap_orRiepilogo - Trovare un elementoEsercitati da solo: Compilatore Rust online