У меня есть функция get_url_content
и не заботятся об ошибках (это всего лишь тест). Он возвращает Option<String>
.Являются ли вложенные спички плохой практикой в идиоматической ржавчине?
extern crate hyper;
use std::io::Read;
use hyper::client::Client;
fn get_url_content(url: &str) -> Option<String> {
let client = Client::new();
let mut s = String::new();
match client.get(url).send() {
Ok(mut res) => {
match res.read_to_string(&mut s) {
Ok(_) => {
Some(s)
},
Err(_) => {
None
}
}
},
Err(_) => {
None
}
}
}
Эта функция работает нормально, но я считаю ее непростой для чтения. Я думаю, что есть несколько лучших практик в этом случае, чтобы сделать его более читаемым. Являются ли вложенные совпадения плохой практикой (например, callback hell в JS), и если да, то как этого избежать?
Безразлично» t '.map (| mut res | res.read_to_string (& mut s) .ok(). map (| _ | s)) 'fail, потому что' s' заимствовано с изменением и возвращается в том же выражении? –
Это работает. Thx для этого пошагового ответа, это помогает мне лучше понять Rust. –
@ChrisEmerson Нет, так как время жизни выхода не зависит от заимствования. – Veedrac