#include<stdio.h>enumatomic_number{HYDROGEN=1,HELIUM=2,// ...IRON=26,};intmain(void){enumatomic_numberelement=26;if(element==IRON){printf("隔壁Rust做不到,oh yeah!\n");}return0;} 但是在Rust中,以下代码: enumMyEnum{A=1,B,C,}fnmain(){// 将枚举转换成整数,顺利通过letx=MyEnum::C...
enum定义时可以使用#[repr(Int)]修饰,Int就是Rust的整数类型(u8, isize这种)。对于C风格enum和没有变体的enum,repr定义了其需要使用对应整数类型的ABI(大小,对其和调用时的转换)。#[repr(C)]目前只是让Rust编译器尝试对enum选用C编译器使用的各种整型。 此RFC规定了两种兼容C语言的enum内存布局。 在非C风格的...
C / Cpp enum实例可存储任意类型的整数值(比如,char,short,int和long)— 部分原因或许是C系语法灵活的定义形式:“typedef enum块+ 具名常量”。所以,C / Cpp enum非常适合被做成“比特开关”。但在Rust程序中,就不得不引入外部软件包bitflags了。 C内存布局Rust枚举类分辨因子discriminant只能是i32类型— 【存储...
登录后复制enum OptionInt { Some(i32), None, } enum OptionUint { Some(u32), None, } let option_int = OptionInt::Some(123); let option_uint: OptionUint = OptionUint::from(option_int); 进阶用法 为自定义类型实现From trait 我们可以为自定义类型实现From trait,以便将自定义类型转换为其他...
enumHTTPStatus { Ok, NotFound, } 对于C-style enum,在内存中,rust会根据该enum中最大的数来选择内存占用最小的int来存储,此例中没有指定就会默认Ok为0,NotFound为1,Rust选择占用1 byte的i8来存储enum。 同时,每个Enum的整数值是可以指定的,例如: ...
fnmain(){// 使用Newtype包装器letmy_int=MyInt(42);println!("Original: {}",my_int.0);// 输出原始值:42println!("Doubled: {}",my_int.double());// 输出新的方法计算结果:84} 在上述例子中,我们使用Newtype包装器MyInt将现有类型i32包装起来,并通过Newtype结构体的方法进行操作。
enumWebEvent{// 一个 `enum` 可以是单元结构体(称为 `unit-like` 或 `unit`),PageLoad, PageUnload,// 或者一个元组结构体,KeyPress(char),Paste(String),// 或者一个普通的结构体。Click { x:i64, y:i64} } 访问枚举值 // 方法一:WebEvent::PageLoad// 方法二:useWebEvent::{PageLoad};/...
fn main() { enum SpreadsheetCell {Int(i32), Float(f64), Text(String), }let row = vec![ SpreadsheetCell::Int(3), SpreadsheetCell::Text(String::from("blue")), SpreadsheetCell::Float(10.12), ];} HashMap HashMap存储了KV结构的数据,各个Key必须是同一种类型,各...
enum:定义一个枚举;而常量可以通过 const 和 static 关键字来创建。结构体结构体有 3 种类型,分别是 C 风格结构体、元组结构体、单元结构体。先来看后两种:// 不带有任何字段,一般用于 traitstruct Unit; // 元组结构体,相当于给元组起了个名字 struct Color(u8, u8, u8); fn main() { // 单元结构...
从DeriveInput所实现的Parse和DeriveInput数据结构可以看出,derive式过程宏只支持Struct,Enum和Union三种数据结构。 写过程宏的一个重要的工作就是获取所修饰的数据结构的基本信息,而对于derive式过程宏来说,这些数据放到attrs这个属性里面,用Attribute这个结构来表示,Meta则是存储这样数据的。