or_else 处理一个Result并返回一个Result,当前是某种错误时,通过传入的op方法,处理错误;如果是非错误类型,则不受影响。 pub fn or_else<F, O: FnOnce(E) -> Result<T, F>>(self, op: O) -> Result<T, F> { match self { Ok(t) => Ok(t), Err(e) => op(e), } } or_else 通常用于...
fndivide(a:f64,b:f64)->Result<f64,String>{ifb==0.0{Err("Division by zero".to_string())}else{Ok(a/b)}}letok=divide(4.0,2.0);// Ok(2.0)leterr=divide(4.0,0.0);// Err("Division by zero") 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 2. 常用方法 错误处理: matchdivide(4.0,0....
为了让别人的工作更容易,应该用Result而不是Option,即使这可能涉及不同错误类型之间的转换(第 4 项);Result 还具有 [#must_use] 属性,可以正确的指引库用户。 显式使用match允许错误传播,但代价是一些可见的样板代码(让人想起Go)。 pubfnfind_user(username:&str)->Result<UserId,std::io::Error...
use std::fs::File; use std::io::Read; fn read_file_contents(file_name: &str) -> Result<String, std::io::Error> { let mut file = File::open(file_name)?; let mut contents = String::new(); file.read_to_string(&mut contents)?; Ok(contents) } fn main() { match read_file...
let result = match number { 1 => "One", // 返回 &str 类型 2 => 2, // 返回 i32 类型 _ => "Other", // 返回 &str 类型 }; println!("The result is: {}", result); } ``` 在这个例子中,`match` 语句的第一个分支返回一个 `&str` 类型的值,第二个分支返回一个 `i32` 类型的...
match result { Ok(value) => println!("Result: {}", value), Err(e) => println!("Error: {}", e), } } 使用if let语句 if let 语句是 match 的简化版本。它只能匹配一种情况,不需要处理其他情况。 以下是一个简单的例子: fn divide(numerator: f64, denominator: f64) -> Result<f64, ...
在Rust中,match语句主要用于处理枚举类型。但是,如果你想根据函数返回值进行匹配,可以使用模式匹配来解包返回值。这里有一个例子: 首先,定义一个枚举类型,用于表示函数的返回值: enumResult{Success(i32),Failure(String), } 接下来,定义一个函数,它返回Result枚举类型: ...
read_file函数接受文件路径,并返回Result错误。如果文件读取或打开操作失败,函数返回Err值。否则,函数返回Ok值。在main函数中,match语句处理Result值,并根据文件操作的情况打印输出结果。 Option类型 Option类型是表示值存在或不存在的内置类型。Option类型有两个变体。Some表示值,None表示没有值。
let x = Some(2); let x_result = match x { //精确匹配Some(5),x=Some(2),会匹配失败 Some(5) => 5, _ => -1, }; println!("{}",x_result); let x = Some(2); let x_result = match x { //只要x有值,就能匹配成功 Some(n) => n, _ => -1, }; println!("{}",x_...
matchcoin{ Coin::Penny=>1, Coin::Nickel=>5, Coin::Dime=>10, Coin::Quarter=>25, } } 错误处理 Rust 有两种主要的错误处理方式:Result<T, E>和Option<T>。 Result: 实例 enumResult<T,E>{ Ok(T), Err(E), } fndivide(a:i32,b:i32)->Result<i32,String>{ ...