fn main() { match divide(10, 2) { Ok(result) => println!("Result: {}", result), Err(e) => println!("Error: {}", e), } } 在这个例子中,divide函数使用Result类型返回除法操作的结果。如果除数为零,返回Err;否则返回Ok包裹的商。 Option类型 与Result不同,Option类型用于表示值可能存在或不...
Option 是一个 enum,它比 Result 更简单 pub enum Option<T> { None, // 表示没有值 Some(T), // 表示有值,值的类型为T } Option 跟Result 的区别是,当错误时,返回的是 None,而没有错误结果。Option 和Result 类型一样,也有 unwrap 和expect 等方法。 例子 fn main() { // 除数不为0的情况 ...
fn main() { let string1 = String::from("abcd"); let string2 = "xyz"; let result = longest(string1.as_str(), string2); // result 是string1 或者string2 的借用,通过longest函数的生命周期标注,// 可以明确result的生命周期要求result 必须在string1 和string2生命周期// 的覆盖范围内。 基于...
一种是返回实现Terminationtrait的something。可以是ExitCode,表示退出状态;Result<T, E>,其中T实现Termi...
因此如果函数返回io::Result,失败时返回的是io::Error时,就可以调用kind方法,进一步匹配不同的错误原因进行不同处理。 usestd::fs::File;usestd::io::ErrorKind;fnmain() {letf = File::open("hello.txt").unwrap_or_else(|err| {matcherr.kind() { ...
fn main() -> Result<(), Box<dyn std::error::Error>> {let result = std::fs::read_to_string("test.txt");let content = match result {Ok(content) => { content },Err(error) => { return Err(error.into()); }};println!("文件内容:{}", content);Ok(())} ...
一种是返回实现Terminationtrait的something。可以是ExitCode,表示退出状态;Result<T, E>,其中T实现...
match 的return Err(e) 部分要求返回值类型是 Result,所以函数的返回值必须是 Result 才能与这个 return 相兼容。 让我们看看在 main 函数中使用 ? 运算符会发生什么,如果你还记得的话其返回值类型是(): use std::fs::File; fn main() { let f = File::open("hello.txt")?; } 当编译这些代码,会...
match result{Ok(v)=>v,Err(e)=>returnErr(e.into())} 我们就能写出这样的函数式编程的代码。 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 fut.await?.process()?.next().await?; 流程如图: 注意:在不同错误类型之间是无法直接使用的,需要实现From trait在二者之间建立转换桥梁。
enumApiError{BadRequest,Forbidden,Unauthorised,InternalServerError}// ... 省略ApiResponse的代码asyncfnmy_function()->Result<ApiResponse,ApiError>{//} 这样我们的路由就可以区分错误和成功的请求了。 3. 在 Axum 中添加数据库 在Rust中使用数据库,那么sqlx[7]肯定是绕不过的。