本文主要是介绍[rust-009]关于enum枚举类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考官方文档https://doc.rust-lang.org/book/ch06-01-defining-an-enum.html
Rust的Enum,类似其他语言,但功能更复杂。
第一种:最简单的用法
#[derive(Debug)]
enum IpAddrKind {V4,V6,
}//这里,V4和V6的数据类型都是 IpAddrKind
fn main() {let four = IpAddrKind::V4;let six = IpAddrKind::V6;println!("four = {:?}", four);println!("six = {:?}", six);
}//结果输出:
/*
four = V4
six = V6
*/
第二种情况:可以在enum里增加变量。
#[derive(Debug)]
enum IpAddr {V4(String),V6(String),
}fn main() {let home = IpAddr::V4(String::from("127.0.0.1"));let loopback = IpAddr::V6(String::from("::1"));println!("home = {:?}", home);println!("loopback = {:?}", loopback);
}//结果输出:
/*
home = V4("127.0.0.1")
loopback = V6("::1")
*/
第三种情况, 可以在enum里增加多个变量
#[derive(Debug)]
enum IpAddr {V4(u8, u8, u8, u8),V6(String),
}fn main() {let home = IpAddr::V4(127, 0, 0, 1);let loopback = IpAddr::V6(String::from("::1"));println!("home = {:?}", home);println!("loopback = {:?}", loopback);
}//结果输出:
/*
home = V4(127, 0, 0, 1)
loopback = V6("::1")
*/
第四种情况,在enum放入复杂的数据类型,取代多个struct定义
#[derive(Debug)]
enum Message {Quit,//没有关联数据Move { x: i32, y: i32 },//关联一个匿名structWrite(String),//包含一个字符串ChangeColor(i32, i32, i32),//包含三个整数
}impl Message {fn call(&self) {println!("message is being called...");println!("self = {:?}", self);}
}fn main() {let m = Message::Write(String::from("hello"));m.call();println!("m = {:?}", m);
}//结果输出:
/*
message is being called...
self = Write("hello")
m = Write("hello")
*/
这篇关于[rust-009]关于enum枚举类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!