枚举值
可以使用枚举并将数据直接放进每一个枚举成员。每个成员可以处理不同类型和数量的数据。
enum IpAddr {
V4(u8, u8, u8, u8),
V6(String),
}
let home = IpAddr::V4(String::from("127.0.0.1"));
let loopback = IpAddr::V6(String::from("::1"));
可以将任意类型的数据放入枚举成员中,例如字符串、数据类型或者结构体。甚至可以包含另一个枚举
struct Ipv4Addr {
// --snip--
}
struct Ipv6Addr {
// --snip--
}
enum IpAddr {
V4(Ipv4Addr),
V6(Ipv6Addr),
}
可以使用impl来为结构体定义方法那样,在枚举上定义方法。方法体中使用self来获取调用方法的值。
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
impl Message {
fn call(&self) {
// 在这里定义方法体
}
}
let m = Message::Write(String::from("hello"));
m.call();
Option枚举和其相对于空值的优势
Option 类型应用广泛因为它编码了一个非常普遍的场景,即一个值要么有值要么没值。意味着编译器需要检查是否处理了所有应该处理的情况。
enum Option<T> {
Some(T),
None,
}
1、可以不使用Option::前缀来直接使用Some和None。
2、当使用None而不是Some时,需要告诉 Rust Option
3、空值是一个因为某种原因目前无效或者缺失的值。
4、Option