Option种类的常见方式

lxf2023-07-17 21:50:02

1. 什么叫Option种类

在Rust中,Option种类是一个枚举类型,它代表一个值可能出现或不会有。它界定如下所示:

enum Option<T> {
    Some(T),
    None,
}

Option种类有2个自变量:SomeNone。当一个值存有时,他们被外包装在Some中;当一个值不会有时,他们被来表示None

2. Option种类的用处

Option种类一般用于解决很有可能不可能的值。比如,在搜索词典里的键时,假如键存有,则返回键相匹配数值;假如键不会有,则回到None

use std::collections::HashMap;

let mut map = HashMap::new();
map.insert(1, "one");
map.insert(2, "two");

assert_eq!(map.get(&1), Some(&"one"));
assert_eq!(map.get(&3), None);

上边代码建立了一个新的哈希表,并引用了2个健值对。然后用get()方式来搜索键为1和3数值。因为键为1数值存有,因此回到了Some(&"one");因为键为3数值不会有,因此回到了None

3. 如何建立Option种类

建立Option种类数值比较简单。可以用SomeNone来建立一个新的Option值。

let x: Option<i32> = Some(5);
let y: Option<&str> = None;

上边代码创立了2个一个新的Option值。第一个数值Some(5),表明存有一个整标值5;第二个数值None,是不存在一个字符串数组值。

4. 怎么使用Option种类

需要使用Option种类数值,往往需要应用匹配算法或使用它方式。

let x: Option<i32> = Some(5);

match x {
    Some(value) => println!("The value is: {}", value),
    None => println!("The value is missing"),
}

上边代码应用匹配算法来处理一个Option<i32>种类数值。若该数值Some(value),则快速打印该值;若该数值None,则快速打印"The value is missing"。

5. Option种类的常见方式

Option种类带来了很多有效的方法去解决很有可能不可能的值。比如,可以用is_some()is_none()方式来查验一个值存不存在。

let x: Option<i32> = Some(5);

assert_eq!(x.is_some(), true);
assert_eq!(x.is_none(), false);

上边代码建立了一个新的

Option<i32>种类数值,并用is_some()is_none()方式来查验该值存不存在。因为该数值Some(5),因此is_some()回到trueis_none()回到false

也可以使用unwrap()方式来获得外包装在Some里的值。可是,假如数值None,往往会引起运行时错误。

let x: Option<i32> = Some(5);

assert_eq!(x.unwrap(), 5);

上边代码建立了一个新的Option<i32>种类数值,并用unwrap()方式来获得外包装在Some里的值。因为该数值Some(5),因此unwrap()回到5。

为了防止运行时错误,可以用unwrap_or()方式来提供一个初始值。

let x: Option<i32> = None;

assert_eq!(x.unwrap_or(0), 0);

上边代码建立了一个新的Option<i32>种类数值,并用unwrap_or()方式来获得外包装在Some里的值或者一个初始值。因为该数值None,因此回到了初始值0。

6. Option种类与异常处理

在Rust中,异常处理通常采用Result种类。可是,某些情况下,也可以用Option种类来处理错误。

比如,在分析字符串数组为整数金额时,假如字符串数组不是有效的整数金额,则回到None。

fn parse_int(s: &str) -> Option<i32> {
    match s.parse() {
        Ok(n) => Some(n),
        Err(_) => None,
    }
}

assert_eq!(parse_int("42"), Some(42));
assert_eq!(parse_int("abc"), None);

上边代码重新定义了一个名为parse_int()的函数公式,它接纳一个字符串数组做为主要参数,并试着把它分析为整数金额。假如分析取得成功,则回到外包装在Some里的整数金额;假如解析失败,则回到None

7. Option种类与匹配算法

在Rust中,匹配算法是一种强悍的作用,它可用作解决繁杂的算法设计。当解决Option种类时,也可以用匹配算法来获取外包装在Some里的值。

let x: Option<i32> = Some(5);

match x {
    Some(value) => println!("The value is: {}", value),
    None => println!("The value is missing"),
}

上边代码应用匹配算法来处理一个 Option<i32>种类数值。若该数值Some(value),则快速打印该值;若该数值None,则快速打印"The value is missing"。

除此之外,也可以使用if let句子来简单化匹配算法。

let x: Option<i32> = Some(5);

if let Some(value) = x {
    println!("The value is: {}", value);
} else {
    println!("The value is missing");
}

上边代码应用if let句子来处理一个Option<i32>种类数值。若该数值Some(value),则快速打印该值;不然,快速打印"The value is missing"。from刘金,转载请注明原文链接。感激!

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!