自定义类型

自定义数据

  • struct: 定义一个结构体(structure)
  • enum: 定义一个枚举类型(enumeration)# 自定义类型

常量(constant)可以通过 conststatic 关键字来创建。

结构体

  • 元组结构体(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);
}