1. 什么叫Option种类
在Rust中,Option
种类是一个枚举类型,它代表一个值可能出现或不会有。它界定如下所示:
enum Option<T> {
Some(T),
None,
}
Option
种类有2个自变量:Some
和None
。当一个值存有时,他们被外包装在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
种类数值比较简单。可以用Some
和None
来建立一个新的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()
回到true
,is_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刘金,转载请注明原文链接。感激!