Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Трейт Default

Default задаёт значение по умолчанию для типа.

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[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();
    dbg!(default_struct);

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

    let nothing: Option<Derived> = None;
    dbg!(nothing.unwrap_or_default());
}
This slide should take about 5 minutes.
  • Его можно реализовать вручную или получить через #[derive(Default)].
  • Реализация, полученная через derive, создаёт значение, в котором все поля установлены в значения по умолчанию.
    • Это означает, что все типы в структуре тоже должны реализовывать Default.
  • Стандартные типы Rust обычно реализуют Default с разумными значениями (например, 0, "" и т. д.).
  • Частичная инициализация структуры хорошо сочетается с default.
  • Стандартная библиотека Rust знает, что типы могут реализовывать Default, и предоставляет удобные методы, которые его используют.
  • Синтаксис .. называется синтаксисом обновления структуры.