option
前面的文章中我们介绍了enum的简单使用,本篇文章主要介绍option,option是标准库定义的另一个枚举,option的应用更加广泛,原因是它设定了一个非常普遍的场景,即要么有值要么没值。
从类型系统的角度来表达这个概念就意味着编译器在编译时就需要检查是否处理了所有应该处理的情况,这样就可以避免在其他编程语言中非常常见的 bug。
Rust语言并没有很多其他语言中有的空值功能。空值(Null )是一个值,它代表没有值。在有空值的语言中,变量总是这两种状态之一:空值和非空值。
空值的问题在于当你尝试像一个非空值那样使用一个空值,会出现某种形式的错误。因为空和非空的属性无处不在,非常容易出现这类错误。
而Rust从根本上解决了这个问题,因为Rust没有空值,但是Rust拥有一个可以编码存在或不存在概念的枚举。这个枚举就是option,而且option定义于标准库中,如下代码示例:
enum Option
some(T),
None
}
在本文中只需要知道的是
fn main() {
let some_number = Some(5);
let some_string = Some("a string");
let absent_number: Option
}
如果使用 None 而不是 Some,需要告诉 Rust Option
当有一个 Some 值时,我们就知道存在一个值,而这个值保存在 Some 中。当有个 None 值时,在某种意义上,它跟空值具有相同的意义:并没有一个有效的值。那么,Option
fn main() {
let x: i8 = 5;
let y: Option
let sum = x + y;
}
如果运行上述代码,则会抛出下面的异常:
error[E0277]: the trait bound `i8: std::ops::Add
not satisfied
-->
|
5 | let sum = x + y;
| ^ no implementation for `i8 + std::option::Option
|
异常的意思就是Rust 不知道该如何将 Option
换句话说,在对 Option
如果程序中可能会出现值为空的值,就必须现实的将其放入对应类型的 Option
文章链接
发表评论