io::Error>{letusername_file_result=File::open("hello.txt");letmutusername_file=matchusername_file_result{Ok(file)=>file,Err(e)=>returnErr(e),};letmutusername=String::new();matchusername_file.read_to_string(&mutusername){Ok(_)=>Ok(username),Err(e)=>Err(e),}}...
#[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...
io::Error>{letusername_file_result=File::open("hello.txt");letmutusername_file=matchusername_file_result{Ok(file)=>file,Err(e)=>returnErr(e),};letmutusername=String::new();matchusername_file.read_to_string(&mutusername){Ok(_)=>Ok...
{fs::File, io::Read}; //返回Result<String, Error>让调用者处理 pub fn read_data_from_file() -> Result<String, Error> { let f = File::open("test.txt"); let mut f = match f { Ok(file) => file, Err(e) => return Err(e), }; //函数的最后一个表达式 let mut s = ...
found type `std::result::Result<std::fs::File, std::io::Error>` 这就告诉我们了File::open函数的返回值类型是Result<T, E>。这里泛型参数T放入了成功值的类型std::fs::File,它是一个文件句柄。E被用在失败值上时E的类型是std::io::Error。
实例fn g(i: i32) -> Result<i32, bool> { let t = f(i); return match t { Ok(i) => Ok(i), Err(b) => Err(b) }; } 函数g 传递了函数 f 可能出现的错误(这里的 g 只是一个简单的例子,实际上传递错误的函数一般还包含很多其它操作)。
examples/0_result.rs #[derive(Debug)]pubenumMyError{ Internal(String), InvalidId(String), }fnadd(num:i64) ->Result {ifnum <0{Err(MyError::InvalidId(String::from("Invalid num!"))) }else{Ok(num +100000) } }fnmain() ->Result<(), MyError> {// fetch_id(-1)?;letres = add...
Err(e) => println!("Error: {}", e), } } 在这个例子中,divide函数使用Result类型返回除法操作的结果。如果除数为零,返回Err;否则返回Ok包裹的商。 Option类型 与Result不同,Option类型用于表示值可能存在或不存在。Option有两个变体:Some和None。Some用于包裹存在的值,而None表示没有值。
error: process didn't exit successfully: `target\debug\hello_cargo.exe` (exit code: 101) 可见第5个栈信息是测试代码,其他是库代码。提示显示可设置RUST_BACKTRACE=full可获得一详细的backtrace。 可恢复的错误与Result 通常情况下,会对程序运行可能的错误进行处理,而不是让程序终止运行,而且很多错误也是通过一...
use std::io; use std::io::Read; use std::fs::File; fn read_username_from_file() -> Result<String, io::Error> { let f = File::open("hello.txt"); let mut f = match f { Ok(file) => file, Err(e) => return Err(e), }; let mut s = String::new(); match f.read_...