Rust futures:修订间差异
小 →Unwrap 标签:2017版源代码编辑 |
小 →Unwrap 标签:2017版源代码编辑 |
||
第36行: | 第36行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
You can set default value if unwrap failed, thus no panic: | |||
<syntaxhighlight lang="rust"> | |||
let url1 = get_url(&google).unwrap_or_default(); | |||
let url2 = get_url(&unknown).unwrap_or_default(); | |||
let url3 = get_url(&unknown).unwrap_or(String::from("<Unknown url>")); | |||
println!("Url of {} is {}", google, url1); | |||
println!("Url of {} is {}", unknown, url2); | |||
println!("Url of {} is {}", unknown, url3); | |||
//Url of Google is https://google.com | |||
//Url of Unknown is | |||
//Url of Unknown is <Unknown url> | |||
</syntaxhighlight> | |||
`unwrap_or_else` accepts a function to convert error to result type: | |||
<syntaxhighlight lang="rust"> | |||
let url2 = get_url(&unknown).unwrap_or_else(|err| format!("Unknown url, error code={}!", err)); | |||
// Url of Unknown is Unknown url, error code=2! | |||
</syntaxhighlight> | |||
[[Category:Rust]] | [[Category:Rust]] |
2024年12月28日 (六) 11:42的最新版本
Result
Unwrap
fn get_url(name: &String) -> Result<String, i32> {
match name.as_str() {
"Google" => Ok(String::from("https://google.com")),
"Bing" => Ok(String::from("https://bing.com")),
"" => Err(1),
_ => Err(2),
}
}
You could unwarp the result of error by calling `unwrap` or `unwrap_err`, be aware that it will panic if not matched:
fn main() {
let google: String = String::from("Google");
let unknown: String = String::from("Unknown");
let url = get_url(&google).unwrap();
println!("Url of {} is {}", google, url);
// Url of Google is https://google.com
// panic
// let url = get_url(&unknown).unwrap();
let err = get_url(&unknown).unwrap_err();
println!("error code is {}", err);
// error code is 2
// panic
//let err = get_url(&google).unwrap_err();
}
You can set default value if unwrap failed, thus no panic:
let url1 = get_url(&google).unwrap_or_default();
let url2 = get_url(&unknown).unwrap_or_default();
let url3 = get_url(&unknown).unwrap_or(String::from("<Unknown url>"));
println!("Url of {} is {}", google, url1);
println!("Url of {} is {}", unknown, url2);
println!("Url of {} is {}", unknown, url3);
//Url of Google is https://google.com
//Url of Unknown is
//Url of Unknown is <Unknown url>
`unwrap_or_else` accepts a function to convert error to result type:
let url2 = get_url(&unknown).unwrap_or_else(|err| format!("Unknown url, error code={}!", err));
// Url of Unknown is Unknown url, error code=2!