The Default Trait

ویژگی Default یک مقدار پیش‌فرض برای یک تایپ تولید می‌کند.

#[derive(Debug, Default)]
struct Derived {
    x: u32,
    y: String,
    z: Implemented,
}

#[derive(Debug)]
struct Implemented(String);

impl Default for Implemented {
    fn default() -> Self {
        Self("John Smith".into())
    }
}

fn main() {
    let default_struct = Derived::default();
    println!("{default_struct:#?}");

    let almost_default_struct =
        Derived { y: "Y is set!".into(), ..Derived::default() };
    println!("{almost_default_struct:#?}");

    let nothing: Option<Derived> = None;
    println!("{:#?}", nothing.unwrap_or_default());
}
This slide should take about 5 minutes.
  • این ویژگی می‌تواند به طور مستقیم پیاده‌سازی شود یا می‌تواند از طریق [derive(Default)]# به صورت خودکار تولید شود.
  • یک پیاده‌سازی خودکار، مقداری تولید می‌کند که در آن تمامی فیلدها به مقادیر پیش‌فرض خود تنظیم شده‌اند.
    • این بدان معناست که تمام تایپ‌های موجود در ساختار نیز باید Default را پیاده‌سازی کنند.
  • نوع‌های استاندارد Rust اغلب Default را با مقادیر معقول پیاده‌سازی می‌کنند (مثل 0، "" و غیره).
  • مقداردهی جزئی ساختارها با Default به خوبی کار می‌کند.
  • کتابخانه استاندارد Rust آگاه است که تایپ‌های مختلف می‌توانند Default را پیاده‌سازی کنند و روش‌های کمکی را فراهم می‌کند که از آن استفاده می‌کنند.
  • سینتکس .. به نام سینتکس به‌روزرسانی ساختار شناخته می‌شود.