Rust futures:修订间差异

来自WHY42
Riguz留言 | 贡献
标签2017版源代码编辑
Riguz留言 | 贡献
标签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!