Skip to content
文档章节

结构体和枚举

枚举和结构体的概念不是 Rust 独有的,作用自然差不多。这里简单说一下其在 Rust 中的用法。

结构体

可以参考 C 语言中结构体, 将数据组合在一起。

rust
#[derive(Debug)]
struct IpAddr {
    kind: IpAddrKind,
    address: String,
}

let mut home1 = IpAddr {
    kind: IpAddrKind::V4,
    address: String::from("127.0.0.1"),
};

home1.address = String::from("192.168.0.1");

枚举

使用关键字 enum,用法也简单,比如

rust
#[derive(Debug)]
enum IpAddrKind {
    V4,
    V6,
}

枚举使用,上面的 V4, V6 都是 IpAddrKind 类型

通过上面 IpAddr 结构体的例子,我们可以正常使用枚举。不过,Rust 中枚举好用的地方在于,枚举各种类型中可以携带其他信息。比如

rust
#[derive(Debug)]
enum IpAddr {
    V4(String),
    V6(String),
}

let home1 = IpAddr::V4(String::from("192.168.0.1"));
let home2 = IpAddr::V6(String::from("::1"));

println!("home1={:?}", home1);
println!("home2={:?}", home2);

另外,参数也可以是结构体等其他类型数据,不止有 String, 可以看到下面例子中 Move 有类似结构体的字段

rust
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}