复制 enumFruit{Apple,Banana,Orange,}fnmain(){letfruit:Fruit=Fruit::Apple;match fruit{Fruit::Apple=>println!("It's an apple!"),Fruit::Banana=>println!("It's a banana!"),Fruit::Orange=>println!("It's an orange!"),}} 四、其他数据类型 除了基本数据类型、复合数据类型和自定义数据类型,...
("unknown number"), } } 但是上面的代码有个问题,你需要为每个枚举成员都实现一个转换分支,非常麻烦。好在可以使用宏来简化,自动根据枚举的定义来实现TryFrom特征: macro_rules! back_to_enum { ($(#[$meta:meta])* $vis:vis enum $name:ident { $($(#[$vmeta:meta])* $vname:ident $(= $...
2、枚举(Enum) 枚举是一种自定义的数据类型,它可以表示多个可能的值。枚举使用enum关键字定义,并可以包含不同的变体(variant)。 以下是一个枚举的示例: enum Fruit { Apple, Banana, Orange, } fn main() { let fruit: Fruit = Fruit::Apple; match fruit { Fruit::Apple => println!("It's an apple!
enum Data { Empty, Number(i32), Array(Vec<i32>), } Empty变体不存储任何其它数据,Number变体中有一个 i32,Array变体保存了一个元素类型为 i32 的 Vec。首先来看一下Array变体的内存布局: 首先是一个整数标记,这里就是 2 。然后是三个 usize 用来存储 Vec 。编译器还将添加一些 padding 以满足内存对齐。
number-=1; } for 循环 实例 fornumberin1..4{ println!("{}!",number); } 所有权 (Ownership) Rust 中的所有权是独特的内存管理机制,核心概念包括所有权 (ownership)、借用 (borrowing) 和引用 (reference)。 所有权规则: Rust 中的每个值都有一个所有者。
enum Result { Ok(i32), Err(String), } fn main() { let success = Result::Ok(66); let failure = Result::Err(String::from("failed")); } 在上面的示例代码中,Result::Ok有一个i32类型的关联值,Result::Err有一个String类型的关联值。
enumWebEvent{// 一个 `enum` 可以是单元结构体(称为 `unit-like` 或 `unit`),PageLoad, PageUnload,// 或者一个元组结构体,KeyPress(char),Paste(String),// 或者一个普通的结构体。Click { x:i64, y:i64} } 访问枚举值 // 方法一:WebEvent::PageLoad// 方法二:useWebEvent::{PageLoad};/...
enum HttpStatus { Ok = 200, NotFound = 404, } 本例中,Rust会选择占用2 byte的i16来存储enum(以满足存储404)。 接着我们来看更复杂一些的Enum: Empty, Number(i32), Array(Vec<i32>), 对于这类有具体数据结构的Enum,每一个Enum中的元素都有一个 1 byte的tag,tag用于标识属于Enum中具体哪个变量。此...
本例中,Rust会选择占用2 byte的i16来存储enum(以满足存储404)。 接着我们来看更复杂一些的Enum: Empty, Number(i32), Array(Vec<i32>), 对于这类有具体数据结构的Enum,每一个Enum中的元素都有一个 1 byte的tag,tag用于标识属于Enum中具体哪个变量。此例中,Empty的话tag为0,而Empty后的内存空间都是为了满...
然后enum 也可以像 C 语言的枚举类型一样使用。// 这些枚举成员都有隐式的值// Zero 等于 0,one 等于 1,Two 等于 2 enum Number { Zero, One, Two, } fn main() { // 既然是隐式的,就说明不能直接用 // 需要显式地转化一下 println!("Zero is {}", Number::Zero as i32); println!("...