甜点
我们有时候感觉很简单东西,想一看而过,这样还是不够的。我们还是要动手试一试,只有动手才是自己的。
今天主要分享在 rust 的枚举类型和模式匹配,可以轻松做一些分支的事情。rust 的枚举有点像 haskell 或 #F
类似 C 语言定义枚举方式
enum AppVersion{
Android,
IOS,
}
在很多语言都提供枚举数据类型,那么枚举是什么呢,是结构体?
struct App{
version:AppVersion,
versionName:String,
}
// enum AppVersion2{
// android(String)
// }
fn main(){
let ver2 = App{
version:AppVersion::IOS,
versionName:String::from("1.0.0"),
};
println!("version: {}",ver2.versionName);
println!("hello world")
}
枚举表示某种事物,表示某种事物的可能性,应该是占用较少的内存空间
rust 语言提倡的方式定义枚举
let ver2 = App{
version:AppVersion::IOS,
versionName:String::from("1.0.0"),
};
let androidVersion = AppVersion2::Android(String::from("1.0.0"));
let iosVersion = AppVersion2::IOS(String::from("1.0.0"));
枚举可以是不同类型对象的组合。
enum Message{
Quit,
Move{x:i32, y:i32},
Write(String),
Change(i32,i32,i32),
}
等同于 struct QuitMessage
等同于
struct MoveMessage {
x:i32,
y:i32,
}
impl Message{
fn print(&self){
match *self{
Message::Quit => println!("Quit"),
Message::Move{x,y} => println!("Move x = {}, y = {}",x,y),
Message::Change(a,b,c) => println!("Change a = {}, b = {}, c ={}",a,b,c),
_ => println!("Write")
}
}
}
let quit = Message::Quit;
quit.print();
println!("hello world")
这里还要说一下,在 rust 提供 playground 是一个对于初学者学习 rust 相对不错练习场。
https://play.rust-lang.org/
Quit
hello world
let quit = Message::Quit;
quit.print();
let mv = Message::Move{x:1,y:2};
mv.print();
let wr = Message::Write(String::from("hey"));
wr.print();
Quit
Move x = 1, y = 2
Write
hello world
这就枚举类型以及匹配