Unwrap 及其在 Rust 中的使用
本文将介绍 unwrap
及其在 Rust 中的使用。
Rust 中的 unwrap
在 Rust 中,unwrap
意味着发出以下命令:给我计算结果,如果有错误,恐慌并停止程序。
因为解包是一个非常简单的过程,所以演示它的代码对我们是有益的。
但是,我们需要先调查 Option
和 Result
类型,然后才能执行此操作。
Option
类型
Option
类型是一种使用 Rust 类型系统表达缺席可能性的方法。将缺席的可能性编码到类型系统中是至关重要的,因为它迫使编译器强制程序员处理缺席。
如果可能不存在,则使用 std
库中名为 Option<T>
的 enum
。它采用两个选项
之一的形式。
-
Some(T)
– 已识别类型T
的元素。 -
None
– 未检测到任何元素。
这些情况可以使用 match
显式或隐含 unwrap
处理。隐式处理返回内部元素或 panics
。
语法:
enum Option<T>{None,Some(T),}
查找文件扩展名的示例:
fn find(haystack: &str,words: char)-> Option<usize>{haystack.find(words)}fn main(){letname_of_file="file.doc";matchfind(name_of_file,'.'){None=>println!("Extension could not be found."),Some(i)=>println!("The extension of file is: {}",&name_of_file[i+1..]),}}
输出:
The extension of file is: doc
请注意,panic
可以使用 expect
手动自定义,但 unwrap
产生的相关输出少于显式处理。在下面的示例中,显式处理会产生更受控制的结果,同时在需要时保留 panic
选项。
fn adult_man(food: Option<&str>){matchfood{Some("pasta")=>println!("The food does not taste right."),Some(inner)=>println!("{}? It could be nice.",inner),None=>println!("No good food? Nevertheless."),}}fn food(food: Option<&str>){letinterior=food.unwrap();ifinterior=="pasta"{panic!("Ummmmmm!!!!");}println!("I am glad to have {}s!!!!!",interior);}fn main(){letbruschetta=Some("Bruschetta");letpasta=Some("pasta");letvoid=None;adult_man(bruschetta);adult_man(pasta);adult_man(void);letspaghetti=Some("spaghetti");letnothing=None;food(spaghetti);food(nothing);}
首先,在上述代码中,所有食物都使用 match
明确处理。
所有食物都使用 unwrap
作为部分功能隐式处理。Unwrap
在收到 none
时返回 panic
。
输出:
Bruschetta? It could be nice.
The food does not taste right.
No good food? Nevertheless.
I am glad to have spaghettis!!!!!
Result
类型
Result
是 Option
的更强大的版本。与表示缺席可能性的 Option
不同,Result
表示错误的可能性。
该错误通常用于指示计算执行失败的原因。这是单词 Option
的一般形式。
语法:
enum Result<T,E>{Ok(T),Err(E),}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。