Translate

miércoles, 22 de noviembre de 2023

El Trait Default

 


El Trait Default produce un valor predeterminado para un tipo.

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

}

  • Se puede implementar directamente o se puede derivar mediante #[derive(Default)].
  • Una implementación derive producirá un valor en el que todos los campos se establecerán en sus valores por defecto.
  • Esto significa que todos los tipos de la estructura también deben implementar Default.
  • Los tipos estándar de Rust a menudo implementan el valor predeterminado con valores razonables (por ejemplo, 0, "", etc.).
  • La copia parcial de la estructura funciona bien de forma predeterminada.
  • La biblioteca estándar de Rust es consciente de que los tipos pueden implementar el valor predeterminado y proporciona métodos convenientes para usarlo.
  • la .. sintaxis se llama sintaxis de actualización de estructura