Rust语言-枚举类型
浅谈rust枚举(enum)
参考URL: https://blog.youkuaiyun.com/weixin_44259356/article/details/104007741
Rust 语言提供了 enum 关键字用于定义枚举。
可以处理同一类的不同类型和数量的数据,就可以使用枚举类。
借用下官方文档的例子:
ip地址主要分为ipv4,和ipv6,如果是用java或者c++等面向对象的语言,我们首先应该创建一个类,类里应该有addr属性,用来存放地址,然后还应该有相应的get,set方法来获取和修改地址的值。为了同时保存v4和v6的地址,addr类型必须是String。
v4和v6都为同一类型(IpAddr),只是成员分别为v4和v6。
enum IpAddr {
V4(u8, u8, u8, u8),
V6(String),
}
枚举的赋值
let ipv4= IpAddr::V4(127, 0, 0, 1);
let ipv6= IpAddr::V6(String::from("::1"));
注:枚举的成员位于其标识符的命名空间中,并使用两个冒号分开。
枚举的取值
直接打印
println!("{:#?}", ipv4);
println!("{:#?}", ipv6);
注意:直接打印要通过注解标注枚举 #[derive(Debug)] 否则报错
完整demo
#[derive(Debug)]
enum IpAddr {
V4(u8, u8, u8, u8),
V6(String),
}
fn main(){
println!("--- start ---");
let ipv4 = IpAddr::V4(127, 0, 0, 1);
let ipv6 = IpAddr::V6(String::from("::1"));
println!("{:#?}", ipv4);
println!("{:#?}", ipv6);
println!("--- end ---");
}
通过match
#[derive(Debug)]
enum IpAddr {
V4(u8, u8, u8, u8),
V6(String),
}
fn main(){
println!("--- start ---");
let ipv4 = IpAddr::V4(127, 0, 0, 1);
let ipv6 = IpAddr::V6(String::from("::1"));
println!("{:#?}", ipv4);
println!("{:#?}", ipv6);
match ipv4 {
IpAddr::V4(a,b,c,d) => println!("值为:{},{},{},{}",a,b,c,d),
IpAddr::V6(date) => println!("{}",date),
}
match ipv6 {
IpAddr::V4(a,b,c,d) => println!("值为:{},{},{},{}",a,b,c,d),
IpAddr::V6(date) => println!("{}",date),
}
println!("--- end ---");
}