Rust 第九节 Enum
Enum
普通类型
enum en_state{
idle,
init,
run,
stop,
}
let x = en_state::idle;
let y = en_state::init;
let z = en_state::run;
let n = en_state::stop;
可以作为函数参数
get_state(x);
get_state(y);
get_state(z);
get_state(n);
fn get_state(state : en_state) {
}
功能更加强大的Enum
enum的成员可以是任意类型
enum Ip_addr{
Ipv4(u32,u32,u32,u32), //表示是一个数组
Ipv6(String), //表示为一个字符串
}
let ip4 = Ip_addr::Ipv4(192,1,1,1);
let ip6 = Ip_addr::Ipv6(String::from("::1"));
也可以定义方法
impl Ip_addr {
fn haha(&self) {
}
}
可以通过解构将Enum中的数据解构出来
fn print_ipaddr(ip_addr : Ip_addr) {
//通过match可以将Enum中的值取出来
match ip_addr {
Ip_addr::Ipv4(x,y ,z ,m ) => {
println!("{}:{}:{}:{}",x,y,z,m);
},
Ip_addr::Ipv6(string) => {
println!("{}",string);
},
}
}
print_ipaddr(ip4);
print_ipaddr(ip6);
Operation 枚举
Operation 枚举 是标准库中的一个枚举,用来表示一个值是否存在
这个是Rust中的一个特性;Rust中没有NULL;数据是否存在可以用Option来表示
原型
Option<T> {
Some<T>, //表示值存在,值存在T中
None //表示不存在,相当于NULL
}
Option自动加载到我们的工作区;可以直接使用它的成员;
let o1 = Some((12));
let o2 : Option<i32> = None;
同样,可以取出Some中存储的数据
let o1 = Some((12));
let o3 = opt_add(o1);
fn opt_add(oper : Option<i32>) -> Option<i32> {
match oper {
Some(x) => Some(x + 1),
None => None,
}
}
if let 语句
当一个变量是Option时,我们想快速获取这个变量的数据,就可以使用if let语句
// if let 语句,简单判断值是否为空
if let Some(number) = o3 {
println!("o3 value is {}",number);
}
else {
println!("不相等");
}