IRON = 26, }; int main(void) { enum atomic_number element = 26; if (element == IRON) { printf("隔壁Rust做不到,oh yeah!\n"); } return 0; } 但是在Rust中,以下代码: enum MyEnum { A = 1, B, C, } fn main() { // 将枚举转换成整数,顺利
quick_error! 最开始,我们在写 C 程序的时候,通过定义不同的 int 返回值来表示一个函数是不是有 error。然后到了 C++,我们就可以通过 expection 来处理 error 了。不过到底采用哪种标准,都是没有定论的。 到了Go,直接约定了函数最后一个返回参数是 error,官方还有一篇 blog 来介绍了 Go 的error handling (h...
Brand : String } enum Phone2 { Android_phone(String), Ios_phone(String) } enum Num { Int(u32), Float(f32) } //可以是不同的数据类型 fn main() { let p1 = Phone { Os : Os_type::Android, Brand : String::from("MI10") }; //类似于C语言的定义方式 let p2 = Phone { Os :...
C / Cpp enum实例可存储任意类型的整数值(比如,char,short,int和long)— 部分原因或许是C系语法灵活的定义形式:“typedef enum块+ 具名常量”。所以,C / Cpp enum非常适合被做成“比特开关”。但在Rust程序中,就不得不引入外部软件包bitflags了。 C内存布局Rust枚举类分辨因子discriminant只能是i32类型— 【存储...
对于C-style enum,在内存中,rust会根据该enum中最大的数来选择内存占用最小的int来存储,此例中没有指定就会默认Ok为0,NotFound为1,Rust选择占用1 byte的i8来存储enum。 同时,每个Enum的整数值是可以指定的,例如: enumHttpStatus { Ok=200, NotFound =404, ...
let pi = 3.14f32; // 下面的语句是不合法的,因为类型不同 // let int: u8 = pi // Rust 不支持隐式转换,但可以使用 as let int: u8 = pi as u8; // 转换之后会被截断 println!("{} {}", pi, int); // 3.14 3 // 整数也可以转成 char 类型 let char = 97 as char; println!("...
登录后复制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,以便将自定义类型转换为其他...
以int 型数据为例,如果它在内存中存放的位置按 4 字节对齐,也就是说 1 个 int 的数据全部落在计算机一次取数的区间内,那么只需要取一次就可以了。如果不对齐,很不巧,这个 int 数据刚好跨越了取数的边界,这样就需要取两次才能把这个 int 的数据全部取到(因为每次都取 4 字节,所以还要丢弃不属于 int 的数据...
但依然可以使用.to_int_unchecked::<u8>()维持原来的转化方式 字面量 可通过后缀方式声明其类型 整数 默认 u32 浮点数 默认 f64 类型推断 可以根据赋予的值,来推断类型 减少显示声明类型 Vec 可以通过传入数据的类型 确定其类型 别名type 可以使用 type 对类型进行别名。
enum Weekday {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,} 类C枚举 C-like 与C/C++语言中的枚举成员只允许是usigned int型常量,也称枚举常量。Rust中具有C风格的枚举,那么必须满足枚举里面的成员都是单元结构体。 打印输出 使用#[derive(Debug)]简化输出,格式:println!("{:?}", MyEnum::Varia...