map_err 处理一个Result,当前是某种错误类型时,通过传入的op方法,转换其错误类型; 如果是非错误类型,则不受影响。 pub fn map_err<F, O: FnOnce(E) -> F>(self, op: O) -> Result<T, F> { match self { Ok(t) => Ok(t), Err(e) => Err(op(e)), } } or_else 处理一个Result并返回...
在错误处理方面,Rust采用了一种独特而富有特色的策略,即通过Result类型和Panic机制来管理程序中的错误和异常。 Result类型 Result类型是Rust中处理错误的一种主要方式。在Rust中,函数执行的结果通常被封装在Result枚举中,它有两个可能的值:Ok和Err。Ok表示函数成功执行并返回了期望的结果,而Err则表示函数执行过程中出现...
use std::error::Error; use std::fs::File; fn main() -> Result<(), Box<dyn Error>> { let f = File::open("hello.txt")?; Ok(()) } Box<dyn Error> 被称为 “trait 对象”(“trait object”),第十七章 “为使用不同类型的值而设计的 trait 对象” 部分会做介绍。目前可以理解 Box...
使用Ok和Err来返回结果:在函数中,可以使用Ok(value)来表示成功的结果,其中value是成功时的返回值;使用Err(error)来表示失败的结果,其中error是错误的值。例如:Ok(result)或Err(error)使用模式匹配来处理Result的结果:可以使用match表达式或if let表达式来处理Result的结果。通过匹配Ok和Err的不同情况,可以根据操作的...
示例9-4:使用match表达式处理可能会返回的Result成员 注意与Option枚举一样,Result枚举和其成员也被导入到了 prelude 中,所以就不需要在match分支中的Ok和Err之前指定Result::。 这里我们告诉 Rust 当结果是Ok时,返回Ok成员中的file值,然后将这个文件句柄赋值给变量f。match之后,我们可以利用这个文件句柄来进行读写。
usestd::io;usestd::io::Read;usestd::fs::File;fnread_username_from_file() ->Result<String, io::Error> {letmutf = File::open("hello.txt")?;letmuts =String::new(); f.read_to_string(&muts)?;Ok(s) } 示例9-7:一个使用?运算符向调用者返回错误的函数 ...
unwrap()函数可以看出 Result 中类型,可能是Ok,也可能是Err。如果 Result 中包裹的类型是Ok,那么unwrap()则返回它的值。如果 Result 中的类型是Err,unwrap()则会让程序崩溃。 你也可以用expect()函数像下方这样来处理 Result: Copy letmy_number:f64= my_string.trim().parse().expect(“Parse failed”);...
示例9-4:使用match表达式处理可能的Result成员 注意与Option枚举一样,Result枚举和其成员也被导入到了 prelude 中,所以就不需要在match分支中的Ok和Err之前指定Result::。 这里我们告诉 Rust 当结果是Ok时,返回Ok成员中的file值,然后将这个文件句柄赋值给变量f。match之后,我们可以利用这个文件句柄来进行读写。
unwrap()函数可以看出 Result 中类型,可能是Ok,也可能是Err。如果 Result 中包裹的类型是Ok,那么unwrap()则返回它的值。如果 Result 中的类型是Err,unwrap()则会让程序崩溃。 你也可以用expect()函数像下方这样来处理 Result: Copy letmy_number:f64= my_string.trim().parse().expect(“Parse failed”);...
在Rust中,Err和Ok是Result类型中的两个枚举变量。它们分别表示操作失败和成功。例如: ``` enum Result<T, E> { Ok(T), Err(E), } ``` 如果一个函数返回一个Result类型,我们可以使用match表达式来处理它的返回值。例如: ``` fn main() { let result = divide(10, 5); match result { ...