Come il mio primo tuffo in Rust in un istante, ho iniziato a scrivere il codice per scaricare il contenuto di un file in una stringa, per l'elaborazione successiva (in questo momento sto solo stampando)Modo più pulito per ottenere il contenuto di un file come stringa in Rust?
C'è un pulitore modo di fare questo di quanto lo sono attualmente? Sembra che io sto avendo essere troppo prolissa su di esso, ma io non sto vedendo un buon modo per ripulirlo
use std::io;
use std::io::File;
use std::os;
use std::str;
fn main() {
println!("meh");
let filename = &os::args()[1];
let contents = match File::open(&Path::new(filename)).read_to_end() {
Ok(s) => str::from_utf8(s.as_slice()).expect("this shouldn't happen").to_string(),
Err(e) => "".to_string(),
};
println!("ugh {}", contents.to_string());
}
Non si dovrebbe usare 'unwrap' nel codice di produzione. O 'match',' map' o 'and_then'. – Hauleth
@hauleth Questa è una dichiarazione molto severa. Stai facendo lo stesso reclamo per "panico", "irraggiungibile" o "asserire"? Tutti questi generano un panico del thread. Ci sono molte ragioni per "fare il panico" nel codice di produzione. Specificamente, affermerei che la codifica ** errori logici ** * dovrebbe * causare un panico quando vengono incontrati. Ovviamente, questo esempio non è codice di produzione e la gestione dei casi di errore dipende dall'utente dell'esempio e dal contesto di tale applicazione. – Shepmaster
IMHO si. Dovresti evitare tutti loro se puoi. Personalmente li uso solo se sono certo che questo non andrà nel panico (cioè. FromPrimitive' sulle costanti). Se ho bisogno di andare nel panico, dovrebbe succedere in 'main'. Nelle librerie dovresti restituire 'Result' o' Option', o usare 'log' crate se non è fatale. – Hauleth