【百例RUST - 008】枚举
第一章 基础用法
第01节 类似C语言的定义方式
定义格式
enum 枚举名称{
枚举值1,
枚举值2,
}
案例代码
rust
fn main(){
// 类似于 C语言的定义方式
#[derive(Debug)] // 这里的宏, 只是为了方便输出看结果
enum IpAddKind{
V4,
V6,
}
#[derive(Debug)] // 这里的宏, 只是为了方便输出看结果
struct IpAddr{
kind: IpAddKind,
address: String,
}
let i1 = IpAddr{
kind: IpAddKind::V4,
address: String::from("127.0.0.1"),
};
let i2 = IpAddr{
kind: IpAddKind::V6,
address: String::from("fe80::202:b3ff:fe1e:8329"),
};
println!("i1 = {:#?}", i1);
println!("i2 = {:#?}", i2);
}
// i1 = IpAddr {
// kind: V4,
// address: "127.0.0.1",
// }
// i2 = IpAddr {
// kind: V6,
// address: "fe80::202:b3ff:fe1e:8329",
// }
第02节 rust推荐的定义方式
相同的类型方案
rust
fn main(){
// rust 推荐的定义方式
#[derive(Debug)]
enum IpAddKind{
V4(String),
V6(String),
}
let i1 = IpAddKind::V4(String::from("127.0.0.1"));
let i2 = IpAddKind::V6(String::from("fe80::202:b3ff:fe1e:8329"));
println!("i1 = {:#?}", i1);
println!("i2 = {:#?}", i2);
}
// i1 = V4(
// "127.0.0.1",
// )
// i2 = V6(
// "fe80::202:b3ff:fe1e:8329",
// )
不同的类型方案
rust
fn main(){
// rust 推荐的定义方式
#[derive(Debug)]
enum IpAddKind{
V4(u8,u8,u8,u8),
V6(String),
}
let i1 = IpAddKind::V4(127,0,0,1);
let i2 = IpAddKind::V6(String::from("fe80::202:b3ff:fe1e:8329"));
println!("i1 = {:#?}", i1);
println!("i2 = {:#?}", i2);
}
// i1 = V4(
// 127,
// 0,
// 0,
// 1,
// )
// i2 = V6(
// "fe80::202:b3ff:fe1e:8329",
// )
第二章 经典用法
第01节 rust的经典用法
案例代码
rust
// rust 经典用法
#[derive(Debug)]
enum Message {
Quit,
Move{x:i32, y:i32},
Write(String),
Change(i32, i32, i32),
}
fn main() {
let i1 = Message::Quit;
let i2 = Message::Move{x:10, y:20};
let i3 = Message::Write(String::from("hello"));
let i4 = Message::Change(11, 22, 33);
println!("i1 = {:#?}", i1);
println!("i2 = {:#?}", i2);
println!("i3 = {:#?}", i3);
println!("i4 = {:#?}", i4);
}
// i1 = Quit
// i2 = Move {
// x: 10,
// y: 20,
// }
// i3 = Write(
// "hello",
// )
// i4 = Change(
// 11,
// 22,
// 33,
// )
第02节 枚举中的方法
案例代码
rust
// rust 经典用法
#[derive(Debug)]
enum Message {
Quit,
Move{x:i32, y:i32},
Write(String),
Change(i32, i32, i32),
}
// 定义枚举类型的方法(准备分支选择)
impl Message{
fn print_message(&self){
match self{
Message::Quit => println!("Quit"),
Message::Move{x, y} => println!("Move x={}, y={}", x, y),
Message::Write(text) =>println!("Write {}", text),
Message::Change(a, b, c) => println!("Change a={}, b={}, c={}", a, b, c),
}
}
}
fn main() {
let i1 = Message::Quit;
let i2 = Message::Move{x:10, y:20};
let i3 = Message::Write(String::from("hello"));
let i4 = Message::Change(11, 22, 33);
i1.print_message();
i2.print_message();
i3.print_message();
i4.print_message();
}
// Quit
// Move x=10, y=20
// Write hello
// Change a=11, b=22, c=33