题外话:标准库默认衔接特质Default

学习内容

  • 理解标准库默认衔接特质Default

篇目

  1. 默认衔接特质Default功能
  2. 使用默认衔接特质Default
  3. 实现自己默认衔接特质Default
  4. 参考资料

默认衔接特质Default功能

  标准库默认衔接特质Default也是一个有用的可衍生特质,为类型提供默认值的特质,也就是为类型提供默认的实例化手法。

使用默认衔接特质Default

  在使用默认衔接特质Default的函数default()定义变量时,必须说明变量类型。

#![allow(dead_code)]

mod trait_exerci {
    #[derive(Default, Debug)]
    pub struct StructType {
        pub data: u32,
    }
}

// cargo run --example trait_default
fn main() {
    let instance: trait_exerci::StructType = Default::default();
    println!("{0: <20} = {1}", "instance.data", instance.data);
    println!("{0: <20} = {1:?}", "instance", instance);
}

实现自己默认衔接特质Default

#[derive(Debug)]``
pub struct Person {
    name: String,
    age: u32,
}

impl Default for Person {
    fn default() -> Person {
        Person {
            name: String::from("Leo"),
            age: 24,
        }
    }
}

fn main() {
    let instance: Person = Default::default();
    println!("{:?}", instance);
    let mut instance = Person { age: 23, ..Default::default() };
    instance.age = 24;
    println!("{:?}", instance);
}

参考资料