自定义类型
自定义数据
struct: 定义一个结构体(structure)enum: 定义一个枚举类型(enumeration)# 自定义类型
常量(constant)可以通过 const 和 static 关键字来创建。
结构体
-
元组结构体(tuple struct),事实上就是具名元组而已
#![allow(unused)] fn main() { struct Pair(i32, f32); } -
经典的 C 语言风格结构体(C struct)
#![allow(unused)] fn main() { struct Point { x: f32, y: f32, } } -
单元结构体(unit struct),不带字段,在泛型中很有用
#![allow(unused)] fn main() { struct Nil; }枚举
可以使用 impl 来为结构体定义方法
#![allow(unused)] fn main() { enum WebEvent { // 一个 `enum` 可以是单元结构体(称为 `unit-like` 或 `unit`), PageLoad, PageUnload, // 或者一个元组结构体, KeyPress(char), Paste(String), // 或者一个普通的结构体。 Click { x: i64, y: i64 } } impl WebEvent { fn run(&self) { ... } } // 类型别名 (结构体也可以使用类型别名) type WE = WebEvent; // 拥有隐式辨别值(implicit discriminator,从 0 开始)的 enum enum Number { Zero, One, Two, } }
// 拥有显式辨别值(explicit discriminator)的 enum enum Color { Red = 0xff0000, Green = 0x00ff00, Blue = 0x0000ff, }
## 常量
Rust 有两种常量,可以在任意作用域声明,包括全局作用域。它们都需要显式的类型声明.
- `const`:不可改变的值(通常使用这种), <mark>变量都得显式地声明类型</mark>
- `static`:具有 'static 生命周期的,可以是可变的变量(须使用 static mut 关键字, 这个操作是unsafe的,所义操作要放在unsafe块中),<mark>static 变量都得显式地声明类型</mark>
```rust
// 全局变量是在在所有其他作用域之外声明的。
static LANGUAGE: &'static str = "Rust";
static NUMBER: i32 = 10;
const THRESHOLD: i32 = 10;
static mut MUT_NUM: i32 = 10;
unsafe {
MUT_NUM = 22;
}
unsafe {
println!("const MUT_NUM value is {}", MUT_NUM);
}