Appearance
枚举类
rust
#[derive(Debug)]
enum Book {
Papery, Electronic
/*
可以没有属性描述,也可以添加描述
Papery(u32),
Electronic(String),
*/
/*
甚至命名
Papery{index: u32},
*/
}
let book = Book::Papery;
// let book = Book::Papery(1001);
// let book = Book::Papery{index: 1001};
println!("{:?}", book);match
rust中没有switch,但是可以使用match来达到同样的效果。
rust
enum Book {
Papery {index: u32},
Electronic {url: String},
}
let book = Book::Papery{index: 1001};
let ebook = Book::Electronic{url: String::from("url...")};
match book {
Book::Papery { index } => {
println!("Papery book {}", index);
},
Book::Electronic { url } => {
println!("E-book {}", url);
}
}更简单的例子
rust
let t = "abc";
match t {
"abc" => println!("yes"), // 像这样,可以直接写成表达式。但是多个条件时,表达式的返回值类型必须相同
_ => {}, // 所有处理分支之外的处理,即默认处理
}Option枚举类
是Rust标准库中的枚举类,填补Rust不支持null引用的空白。
Rust实际上不允许null存在,但是null有时能很方便地解决问题。
rust
enum Option<T>{
Some(T),
None,
}
// 定义一个可以为空值的类
let opt = Option::Some("Hello");
// 操作前要先判断是否为 Option::None
match opt{
Option::Some(something) => {
println!("{}", something);
},
Option::None => {
println!("opt is nothing");
}
}初始值为空的 Option 必须明确类型
rust
let opt: Option<&str> = Option::None;Option 是 Rust 编译器默认引入的,在使用时可以省略 Option:: 直接写 None 或者 Some()
rust
let t = Some(64);
match t {
Some(64) => println!("Yes"),
_ => println!("No"),
}if let
简短的判断可以用if let完成
rust
// let i = 0;
// match i {
// 0 => println!("zero"),
// _ => {},
// }
// 使用if let 改写
let i = 0;
if let 0 = i {
println!("zero");
}