18_option 枚举
1. 概述
- option枚举定义于标准库中
- 在prelude(预导入模块)中
- 描述了:某个值可能存在(某种类型)或不存在的情况
2. Rust没有NULL
在很多编程语言都有NULL,NULL是一个值,它表示“没有值”。这些语言中,一个变量可以处于两种状态:空值(NULL)、非空。NULL的问题在于,当你尝试使用NULL值那样使用NULL值的时候,就会引起某种错误。rust没有NULL,但是NULL的概念还是有用的,因为某种原因变得无效或缺省的值。
rust中提供了类似NULL概念的枚举:Option<T>
,在标准库中定义如下
enum Option<T> {
Some(T),
None,
}
该枚举包含在Prelude(预导入模块)中。可以直接使用:
Option<T>
该枚举的两个变体也可以直接使用
Some(T)
None
具体示例如下代码
fn main() {
// 有效的值
let some_number = Some(5);
let some_string = Some("A String");
// 无效的值
let some_number: Option<i32> = None;
}
3. Option<T>
比Null
好在哪里?
Option<T>
和T
是不同的类型,不可以把Option<T>
直接当成T
,若想使用Option<T>
中的T
,必须将它转换为T
。避免了使用非有效值进行计算而导致错误,如在C#
中假设某个变量值为NULL
,参与计算时将导致错误,如下代码
string a = null;
string b = a + "12345";
所以rust的Option<T>
的设计就避免了NULL值泛滥的情况,使得程序更加安全!
转载自:https://juejin.cn/post/7284196027149287464