在Rust的标准库中会经常出现Result的别名,用来默认确认其中Ok(T)或者Err(E)的类型,这能减少重复编码。比如io::Result use std::num::ParseIntError;use std::result; type Result<T> = result::Result<T, ParseIntError>; fn double_number(number_str: &str) -> Result<i32> { unimplemented!();} (三...
#[stable(feature ="rust1", since ="1.0.0")]pubtypeResult 从io::Result的定义可以看出,io::Result实际上是result::Result的别名。io::Result中的Err成员类型是io::Error。 io::Error是一个结构体,它由一个kind()方法签名是pub fn kind(&self) -> ErrorKind,返回描述错误原因枚举ErrorKind。 ErrorKind...
#[rustc_diagnostic_item = "result_type"] #[stable(feature = "rust1", since = "1.0.0")] pub enum Result<T, E> { /// Contains the success value #[lang = "Ok"] #[stable(feature = "rust1", since = "1.0.0")] Ok(#[stable(feature = "rust1", since = "1.0.0")] T), ...
`std::result::Result` | = note: expected type `u32` found type `std::result::Result<std::fs::File, std::io::Error>` 这就告诉我们了File::open函数的返回值类型是Result<T, E>。这里泛型参数T放入了成功值的类型std::fs::File,它是一个文件句柄。E被用在失败值上时E的类型是std::io::E...
Result 对于可恢复的错误,Rust 提供了Result<T, E>枚举类型来处理这种错误。 enumResult<T, E> {Ok(T),Err(E), } 可以看到,Result中的T和E采用泛型(generic)定义,前者和Ok一起作为正常情况返回,后者和Err一起作为异常情况的返回。 例如: usestd::fs::File;fnmain() {letgreeting_file_result= File::...
在Rust中,使用never type可以使代码更加清晰和易于理解,特别是在处理错误和异常情况时。通过明确标记那些永远不会返回的函数或表达式,开发者可以更容易地识别和处理潜在的错误和异常情况,从而提高代码的可靠性和健壮性。 在下面的示例代码中,divide函数接受两个i32类型的参数a和b,并返回一个Result类型的值。Result类型...
("{}", result); 这里定义了一个"成功"的Result,然后使用模式匹配对其进行处理,如果是Ok的,取出Ok的值,否则取出Err的值。这类简单重复的判断,经常会用到,rust封装了1个等效的方法:unwrap,其内部实现如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 pub fn unwrap(self) -> T { match self { ...
pubtypeResult<T> =Result<T, Error>; 用于I/O 操作的专用Result类型。 此类型在std::io中广泛用于任何可能产生错误的操作。 此typedef 通常用于避免直接写出io::Error,否则直接映射到Result。 虽然通常的 Rust 风格是直接导入类型,但Result的别名通常不是这样,以便更容易区分它们。Result通常假定为std::result::...
pub type Result<T> = Result<T, Box<dyn Any + Send + 'static>>; 线程的专用 Result 类型。 指示线程退出的方式。 Result::Err 变体中包含的值是线程Panics的值;也就是说,调用panic! 宏的参数。与正常错误不同,此值不实现 Error 特征。 因此,处理线程Panics的明智方法是: 用 std::panic::resume_unw...
Result 有两个成员:Ok,它存放一个类型 T 的值,而 Err 则存放一个类型 E 的值。这个定义使得 Result 枚举能很方便的表达任何可能成功(返回 T 类型的值)也可能失败(返回 E 类型的值)的操作。实际上,这就是我们在第9节用来打开文件的方式:当成功打开文件的时候,T 对应的是 std::fs::File 类型;而当打开...