Overview
在本指南中,您可以学习;了解如何在Rust驾驶员中使用 Result 和 Option 枚举。
Rust 提供Result和Option枚举作为应用程序代码的保护措施。 Rust 驱动程序提供的许多方法都会返回以这两种类型之一包装的值。
结果枚举
Result枚举可以返回以下变体:
Ok(T):封装操作结果的值Err(E):如果操作不成功,则会封装一个错误值
例如, insert_one()方法返回Result类型以包装成功响应或错误。
要访问权限insert_one() 的解包结果,请使用 ?操作符。如果操作成功,该方法将返回 Result枚举的 Ok(InsertOneResult) 变体。在本例中,?操作符会解包 InsertOneResult 值并将其赋值给 insert_one_result 变量。如果操作不成功,该方法将返回 Err(E)枚举变体,?操作符会解包并返回错误值。
以下代码演示了在处理插入操作结果时使用 ?操作符的语法:
let insert_one_result = my_coll.insert_one(doc).await?;
或者,您可以创建一个条件来处理InsertOneResult的展开值。 以下代码使用match关键字处理insert_one()结果:
let insert_one_result = my_coll.insert_one(doc).await; match insert_one_result { Ok(val) => { println!("Document inserted with ID: {}", val.inserted_id); }, Err(err) => { println!("Operation not successful"); } }
选项枚举
Option枚举可以返回以下变体:
None:表示操作返回的空值Some(T):封装非空返回值
某些 Rust 驱动程序方法会返回Option类型,例如read_concern()方法。 此方法返回一个Option ,如果不存在读关注,则它会包装一个空值,或者一个ReadConcern值。
要访问read_concern()的结果,可以使用与上例所示相同的match语法来处理None和Some(T)变体。 或者,您可以使用if let语法仅处理Some(T)变体。 以下代码将打开并打印非空read_concern()返回值(如果存在):
if let Some(rc) = my_coll.read_concern() { println!("Read concern: {:?}", rc); }
其他资源
有关Result和Option枚举的更多信息,请参阅 Rust 语言文档中的以下资源: