枚举
...大约 2 分钟
enum关键字允许创建一个从多个不同取值中选其一的枚举类型
enum Role {
Foo,
Bar,
Qux,
}可以指定类型,甚至另一个枚举类型
enum Role {
Foo(i32),
Bar(f32),
Qux(String),
Baz{x:i32, y:i32},
}也可以像结构体那样使用impl定义方法
enum Role {
Foo(i32),
Bar(f32),
Qux(String),
Baz{x:i32, y:i32},
}
impl Role {
fn call(&self) {}
}方法
可以像结构体一样为枚举实现方法:
enum Role {
Foo(i32),
Bar(f32),
Qux(String),
Baz{x: i32, y: i32},
}
impl Role {
fn call(&self) {
// 方法实现
}
// 可以添加更多方法
}Option
在 Rust 中,通常使用Option<T>泛型枚举类型来表示可能存在或不存在的值,它有两种变体:Some(T)和None,使用这种枚举类型用来明确的处理可能为空的值
fn divide(a: i32, b: i32) -> Option<i32> {
if b != 0 {
Some(a / b)
} else {
None
}
}
fn main() {
let result = divide(2, 0);
match result {
Some(value) => println!("{}", value),
None => println!("Cannot divide by zero!"),
}
}Result
Result<T, E>是另一个常用的枚举类型,用于处理可能出错的操作:
unwrap():当返回值是 OK 则返回内部值,否则就会调用panic!expect:在unwrap的基础上指定错误信息unwrap_or(fallback):返回成功值,否则返回 fallback,,丢弃错误值is_ok()和is_err():返回 bool 值,告诉 Result 是成功的结果还是错误的结果ok():返回Option<T>类型的成功值,否则返回Noneerr():返回Option<E>类型的错误值map():map_err(|e| ):
? 运算符
?运算符是 Rust 提供的简化处理Result和Option的语法糖,如果遇到第二个变体就会立即返回,否则提取值并继续执行:
- 只能用于返回 Result 或 Option 类型的函数
- 如果是 Result,错误类型必须匹配或可转换
- 如果是 Option,遇到 None 会直接返回 None
fn read_file() -> Result<String, io::Error> {
let mut file = File::open("hello.txt")?;
let mut s = String::new();
file.read_to_string(&mut s)?;
Ok(s)
}?依赖于 Try trait(目前还是不稳定特性)
