enum Data { Empty, Number(i32), Array(Vec<i32>), } Empty变体不存储任何其它数据,Number变体中有一个 i32,Array变体保存了一个元素类型为 i32 的 Vec。首先来看一下Array变体的内存布局: 首先是一个整数标记,这里就是 2 。然后是三个 usize 用来存储 Vec 。编译器还将添加一些 padding 以满足内存对齐。
enum IpAddr { V4(String), V6(String), } let home = IpAddr::V4(String::from("127.0.0.1")); let loopback = IpAddr::V6(String::from("::1")); println!("{:?}", home); println!("{:?}", loopback); } cargo run Finished dev [unoptimized + debuginfo] target(s) in 0.63s Ru...
2、枚举(Enum) 枚举是一种自定义的数据类型,它可以表示多个可能的值。枚举使用enum关键字定义,并可以包含不同的变体(variant)。 以下是一个枚举的示例: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 enum Fruit { Apple, Banana, Orange, } fn main() { let fruit: Fruit = Fruit::Apple; match ...
number-=1; } for 循环 实例 fornumberin1..4{ println!("{}!",number); } 所有权 (Ownership) Rust 中的所有权是独特的内存管理机制,核心概念包括所有权 (ownership)、借用 (borrowing) 和引用 (reference)。 所有权规则: Rust 中的每个值都有一个所有者。
enumWebEvent{// 一个 `enum` 可以是单元结构体(称为 `unit-like` 或 `unit`),PageLoad, PageUnload,// 或者一个元组结构体,KeyPress(char),Paste(String),// 或者一个普通的结构体。Click { x:i64, y:i64} } 访问枚举值 // 方法一:WebEvent::PageLoad// 方法二:useWebEvent::{PageLoad};/...
然后enum 也可以像 C 语言的枚举类型一样使用。// 这些枚举成员都有隐式的值// Zero 等于 0,one 等于 1,Two 等于 2 enum Number { Zero, One, Two, } fn main() { // 既然是隐式的,就说明不能直接用 // 需要显式地转化一下 println!("Zero is {}", Number::Zero as i32); println!("...
可是这种观点亦有很大的问题,那就是笔者会管结构体叫 struct,管枚举叫 enum。虽然这样前后的翻译逻辑也是一致的,然而对于更多的读者来说,这可能比把 trait 翻译成“特型”更难以接受。于是在“肥蟹书”的审阅过程中,我接受汪老师站在初学者的立场上去思考从而将 trait 翻译成“特型”这一观点。
enum Number { Zero, One, } Rust还支持携带类型参数的枚举体。这样的枚举值本质上属于函数类型,他可以通过显式的指定类型来转换为函数指针类型。例如: enum IpAddr { V4(u8, u8, u8, u8), V6(String), } 枚举体在Rust中属于非常重要的类型之一。例如:Option枚举类型。
enum Value { Null, Bool(bool), Number(Number), String(String), Array(Vec<Value>), Object(Map<String, Value>), } 以下函数可用于将JSON数据解析成serde_json::Value结构: serde_json::from_str,用于解析JSON字符串; serde_json::from_slice,用于对字节切片&[u8]进行解析; serde_json::from_re...
enumOption<T>{None,Some(T),} 注意这里的T是一种泛型,大家应该都清楚是啥了吧。。rust中的泛型会在后面讲。 由于Some<T>和None很常用,所以rust提供了语法糖,让你不需要添加Option<T>::这个前缀。比如: letsome_number=Some(5);letsome_char=Some('e');letabsent_number:Option<i32>=None; ...