跟着谷歌学习Rust:第七课-结构和和枚举

60 阅读1分钟

结构体(struct)

struct Foo {
    x: (u32, u32),
    y: u32,
}

#[rustfmt::skip]
fn main() {
    let foo = Foo { x: (1, 2), y: 3 };
    match foo {
        Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"),
        Foo { y: 2, x: i }   => println!("y = 2, x = {i:?}"),
        Foo { y, .. }        => println!("y = {y}, other fields were ignored"),
    }
}

结构体就如同Java中的类class。也可以称之为对象。 可以将需要抽象事物的使用struct抽象为对象。

struct中定义具体的属性。

枚举(enum)

enum Result {
    Ok(i32),
    Err(String),
}

fn divide_in_two(n: i32) -> Result {
    if n % 2 == 0 {
        Result::Ok(n / 2)
    } else {
        Result::Err(format!("cannot divide {n} into two equal parts"))
    }
}

fn main() {
    let n = 100;
    match divide_in_two(n) {
        Result::Ok(half) => println!("{n} divided in two is {half}"),
        Result::Err(msg) => println!("sorry, an error happened: {msg}"),
    }
}

枚举跟Java中的实现是相同的都是使用enum实现的,前面的代码中可以看到可以使用枚举中的具体属性,也可以通过match匹配枚举的具体值。

总结

google.github.io/comprehensi…