Result
在函数返回值的实现的过程中,有时想返回两种不同的结果,成功时返回正确的变量值,错误时返回该各类出错的信息,而且错误的类型有很多种,那应该如何处理,在Rust里,Result枚举是用应对这种使用场景的。
- Result定义
Result枚举是Rust 中的重要结构。可以在Result.rs中找到它的定义:
pub enum Result<T, E>
{
/// Contains the success value
Ok(T),
/// Contains the error value
Err(E),
}
这里的T和E都指的是泛型,T 表示是确定成功的结果,E 表示是错误值,因为T和E都是泛型,所以能表达很多成功或者错误的结果。
- 使用示例
判断用户注册所输入的用户名或者是密码必须符合某个给定长度才合法的函数
fn check_length(s: &str, min: usize) -> Result<&str, String>
{
if s.chars().count() >= min
{
return Ok(s)
}
else
{
return Err(format!("'{}' is not long enough!", s))
}
}
- 使用结果
结果判断
fn main()
{
let str = "input name!";
let ra = check_length(str, 5);
let rb = check_length(str, 20);
dbg!(ra);
dbg!(rb);
}
两种结果
获取结果
fn main()
{
let str = "input name!";
let ra = check_length(str, 5);
let re_str = match ra
{
Ok(v) => v,
Err(e) => panic!("Problem running 'check_length':\n {:?}", e),
};
}
成功则获取到正确的值,错误则引发恐慌。