core::default::Default - Rust
Description: API documentation for the Rust `Default` trait in crate `core`.
Keywords: rust, rustlang, rust-lang, Default

# Trait core::default::Default 1.0.0 [−] [src]

    pub trait Default: Sized {
        fn default() -> Self;
    }

A trait for giving a type a useful default value.

Sometimes, you want to fall back to some kind of default value, and don't particularly care what it is. This comes up often with `struct`s that define a set of options:

    struct SomeOptions {
        foo: i32,
        bar: f32,
    }Run

How can we define some default values? You can use `Default`:

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

    fn main() {
        let options: SomeOptions = Default::default();
    }Run

Now, you get all of the default values. Rust implements `Default` for various primitives types.

If you want to override a particular option, but still retain the other defaults:

    fn main() {
        let options = SomeOptions { foo: 42, ..Default::default() };
    }Run

## Derivable

This trait can be used with `#[derive]` if all of the type's fields implement `Default`. When `derive`d, it will use the default value for each field's type.

## How can I implement `Default`?

Provide an implementation for the `default()` method that returns the value of your type that should be the default:

    enum Kind {
        A,
        B,
        C,
    }

    impl Default for Kind {
        fn default() -> Kind { Kind::A }
    }Run

# Examples

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

## Required Methods

### `fn default() -> Self`

Returns the "default value" for a type.

Default values are often some kind of initial value, identity value, or anything else that may make sense as a default.

# Examples

Using built-in default values:

    let i: i8 = Default::default();
    let (x, y): (Option<String>, f64) = Default::default();
    let (a, b, (c, d)): (i32, u32, (bool, bool)) = Default::default();Run

Making your own:

    enum Kind {
        A,
        B,
        C,
    }

    impl Default for Kind {
        fn default() -> Kind { Kind::A }
    }Run

## Implementors

- `impl<T: Default> Default for Wrapping<T>`
- `impl<T: ?Sized> Default for PhantomData<T>`
- `impl Default for ()`
- `impl Default for bool`
- `impl Default for char`
- `impl Default for usize`
- `impl Default for u8`
- `impl Default for u16`
- `impl Default for u32`
- `impl Default for u64`
- `impl Default for u128`
- `impl Default for isize`
- `impl Default for i8`
- `impl Default for i16`
- `impl Default for i32`
- `impl Default for i64`
- `impl Default for i128`
- `impl Default for f32`
- `impl Default for f64`
- `impl<T> Default for [T; 32] where
  T: Default,`
- `impl<T> Default for [T; 31] where
  T: Default,`
- `impl<T> Default for [T; 30] where
  T: Default,`
- `impl<T> Default for [T; 29] where
  T: Default,`
- `impl<T> Default for [T; 28] where
  T: Default,`
- `impl<T> Default for [T; 27] where
  T: Default,`
- `impl<T> Default for [T; 26] where
  T: Default,`
- `impl<T> Default for [T; 25] where
  T: Default,`
- `impl<T> Default for [T; 24] where
  T: Default,`
- `impl<T> Default for [T; 23] where
  T: Default,`
- `impl<T> Default for [T; 22] where
  T: Default,`
- `impl<T> Default for [T; 21] where
  T: Default,`
- `impl<T> Default for [T; 20] where
  T: Default,`
- `impl<T> Default for [T; 19] where
  T: Default,`
- `impl<T> Default for [T; 18] where
  T: Default,`
- `impl<T> Default for [T; 17] where
  T: Default,`
- `impl<T> Default for [T; 16] where
  T: Default,`
- `impl<T> Default for [T; 15] where
  T: Default,`
- `impl<T> Default for [T; 14] where
  T: Default,`
- `impl<T> Default for [T; 13] where
  T: Default,`
- `impl<T> Default for [T; 12] where
  T: Default,`
- `impl<T> Default for [T; 11] where
  T: Default,`
- `impl<T> Default for [T; 10] where
  T: Default,`
- `impl<T> Default for [T; 9] where
  T: Default,`
- `impl<T> Default for [T; 8] where
  T: Default,`
- `impl<T> Default for [T; 7] where
  T: Default,`
- `impl<T> Default for [T; 6] where
  T: Default,`
- `impl<T> Default for [T; 5] where
  T: Default,`
- `impl<T> Default for [T; 4] where
  T: Default,`
- `impl<T> Default for [T; 3] where
  T: Default,`
- `impl<T> Default for [T; 2] where
  T: Default,`
- `impl<T> Default for [T; 1] where
  T: Default,`
- `impl<T> Default for [T; 0]`
- `impl Default for AtomicBool`
- `impl<T> Default for AtomicPtr<T>`
- `impl Default for AtomicI8`
- `impl Default for AtomicU8`
- `impl Default for AtomicI16`
- `impl Default for AtomicU16`
- `impl Default for AtomicI32`
- `impl Default for AtomicU32`
- `impl Default for AtomicI64`
- `impl Default for AtomicU64`
- `impl Default for AtomicIsize`
- `impl Default for AtomicUsize`
- `impl<T: Default> Default for Cell<T>`
- `impl<T: Default> Default for RefCell<T>`
- `impl<T: Default> Default for UnsafeCell<T>`
- `impl<T> Default for Empty<T>`
- `impl<T> Default for Option<T>`
- `impl<'a, T> Default for &'a [T]`
- `impl<'a, T> Default for &'a mut [T]`
- `impl<'a> Default for &'a str`
- `impl Default for SipHasher13`
- `impl Default for SipHasher24`
- `impl Default for SipHasher`
- `impl<H> Default for BuildHasherDefault<H>`
- `impl Default for Error`
- `impl<A: Default> Default for (A,)`
- `impl<A: Default, B: Default> Default for (A, B)`
- `impl<A: Default, B: Default, C: Default> Default for (A, B, C)`
- `impl<A: Default, B: Default, C: Default, D: Default> Default for (A, B, C, D)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default> Default for (A, B, C, D, E)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default, F: Default> Default for (A, B, C, D, E, F)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default> Default for (A, B, C, D, E, F, G)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default> Default for (A, B, C, D, E, F, G, H)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default> Default for (A, B, C, D, E, F, G, H, I)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default> Default for (A, B, C, D, E, F, G, H, I, J)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default, K: Default> Default for (A, B, C, D, E, F, G, H, I, J, K)`
- `impl<A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default, K: Default, L: Default> Default for (A, B, C, D, E, F, G, H, I, J, K, L)`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)