17.默认值Default.rs

fn test_1() {
    //没有初始化会编译报错.use of possibly-uninitialized `i`
    let i: i8 = Default::default();
    let (x, y): (Option<String>, f64) = Default::default();
    let (a, b, (c, d)): (i32, u32, (bool, bool)) = Default::default();

    println!("{}", i);
    println!("{:?},{:?}", x, y);
    println!("{},{},{},{}", a, b, c, d);
}

fn test_2() {
    #[derive(Default, Debug)] //(Debug是为了方便打印)
    struct MyTest {
        i: i32,
        j: Option<i32>,
        k: String,
    }

    let mt = MyTest::default();
    println!("{:?}", mt);
}

//自己写default
fn test_3() {
    #[derive(Debug)]
    enum Kind {
        A,
        B,
        C,
    }
    impl Default for Kind {
        fn default() -> Self {
            //fn default() -> Kind {  这么写也是可以的
            Kind::A
        }
    }

    let k = Kind::default();
    println!("{:?}", k);
}

fn test_4() {
    #[derive(Default, Debug)]
    struct SomeOptions {
        foo: i32,
        bar: f32,
    }

    //结构体其他成员默认化
    let options = SomeOptions { foo: 42, ..Default::default() };
}

fn main() {
    test_1();
    test_2();
    test_3();
    test_4();
}

猜你喜欢

转载自blog.csdn.net/liujiayu2/article/details/114387608