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

    pub trait Default {
        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 for [T; 28] where T: Default,` | [src]

- `impl<A, B, C, D, E, F, G, H, I, J, K, L> Default for (A, B, C, D, E, F, G, H, I, J, K, L) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default, K: Default, L: Default,` | [src]

- `impl Default for u16x4` | [src]

- `impl<T> Default for Option<T>` | [src]

- `impl Default for i64` | [src]

- `impl<T> Default for UnsafeCell<T> where T: Default,` | [src]

- `impl<T> Default for [T; 23] where T: Default,` | [src]

- `impl<A, B> Default for (A, B) where A: Default, B: Default,` | [src]

- `impl Default for i8` | [src]

- `impl Default for m32x2` | [src]

- `impl Default for SipHasher` | [src]

- `impl Default for usize` | [src]

- `impl Default for i32x2` | [src]

- `impl<T> Default for [T; 1] where T: Default,` | [src]

- `impl<T> Default for [T; 5] where T: Default,` | [src]

- `impl Default for m8x2` | [src]

- `impl<T> Default for [T; 17] where T: Default,` | [src]

- `impl<'a, T> Default for &'a mut [T]` | [src]

- `impl Default for AtomicU32` | [src]

- `impl<T> Default for [T; 16] where T: Default,` | [src]

- `impl Default for m16x8` | [src]

- `impl Default for m16x4` | [src]

- `impl Default for AtomicI8` | [src]

- `impl Default for u64x4` | [src]

- `impl Default for m16x2` | [src]

- `impl Default for i8x16` | [src]

- `impl<T> Default for [T; 22] where T: Default,` | [src]

- `impl Default for AtomicU16` | [src]

- `impl<T> Default for [T; 4] where T: Default,` | [src]

- `impl Default for m8x32` | [src]

- `impl Default for i32` | [src]

- `impl Default for u8x64` | [src]

- `impl<T> Default for [T; 26] where T: Default,` | [src]

- `impl Default for m1x64` | [src]

- `impl Default for i8x32` | [src]

- `impl Default for i64x8` | [src]

- `impl Default for u8x32` | [src]

- `impl<T> Default for [T; 19] where T: Default,` | [src]

- `impl Default for m1x16` | [src]

- `impl Default for u64x2` | [src]

- `impl Default for isize` | [src]

- `impl<T> Default for [T; 21] where T: Default,` | [src]

- `impl<T> Default for [T; 9] where T: Default,` | [src]

- `impl Default for u32x2` | [src]

- `impl Default for i8x4` | [src]

- `impl Default for u8` | [src]

- `impl Default for AtomicU64` | [src]

- `impl Default for u16x32` | [src]

- `impl<T> Default for [T; 7] where T: Default,` | [src]

- `impl Default for f32x2` | [src]

- `impl Default for f32x4` | [src]

- `impl Default for AtomicI64` | [src]

- `impl Default for m1x32` | [src]

- `impl<T> Default for [T; 18] where T: Default,` | [src]

- `impl<A, B, C, D, E, F, G, H, I, J, K> Default for (A, B, C, D, E, F, G, H, I, J, K) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default, K: Default,` | [src]

- `impl Default for m8x16` | [src]

- `impl<T> Default for Wrapping<T> where T: Default,` | [src]

- `impl<T> Default for [T; 2] where T: Default,` | [src]

- `impl<A, B, C, D, E, F, G, H> Default for (A, B, C, D, E, F, G, H) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default,` | [src]

- `impl Default for i64x4` | [src]

- `impl<T> Default for [T; 27] where T: Default,` | [src]

- `impl<T> Default for [T; 25] where T: Default,` | [src]

- `impl<A, B, C> Default for (A, B, C) where A: Default, B: Default, C: Default,` | [src]

- `impl<T> Default for [T; 8] where T: Default,` | [src]

- `impl Default for i8x64` | [src]

- `impl<T> Default for [T; 29] where T: Default,` | [src]

- `impl<T> Default for [T; 13] where T: Default,` | [src]

- `impl Default for u16x2` | [src]

- `impl<T> Default for [T; 10] where T: Default,` | [src]

- `impl Default for u32x4` | [src]

- `impl Default for Duration` | [src]

- `impl<H> Default for BuildHasherDefault<H>` | [src]

- `impl Default for AtomicU8` | [src]

- `impl Default for ()` | [src]

- `impl<T> Default for [T; 32] where T: Default,` | [src]

- `impl Default for m32x8` | [src]

- `impl Default for m64x4` | [src]

- `impl<T> Default for [T; 0]` | [src]

- `impl Default for bool` | [src]

- `impl<T> Default for [T; 14] where T: Default,` | [src]

- `impl Default for AtomicIsize` | [src]

- `impl<T> Default for [T; 11] where T: Default,` | [src]

- `impl Default for i32x8` | [src]

- `impl Default for u32x8` | [src]

- `impl Default for i8x8` | [src]

- `impl<T> Default for [T; 24] where T: Default,` | [src]

- `impl Default for i32x16` | [src]

- `impl Default for m8x4` | [src]

- `impl Default for u128` | [src]

- `impl Default for i16x32` | [src]

- `impl Default for i16x8` | [src]

- `impl Default for u8x2` | [src]

- `impl Default for i64x2` | [src]

- `impl<T> Default for [T; 6] where T: Default,` | [src]

- `impl Default for i16x4` | [src]

- `impl Default for m8x8` | [src]

- `impl Default for u16x16` | [src]

- `impl Default for f64x4` | [src]

- `impl<'a> Default for &'a str` | [src]

- `impl Default for AtomicUsize` | [src]

- `impl Default for u8x4` | [src]

- `impl<A, B, C, D, E, F, G> Default for (A, B, C, D, E, F, G) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default,` | [src]

- `impl Default for u8x16` | [src]

- `impl Default for m64x2` | [src]

- `impl<T> Default for Reverse<T> where T: Default,` | [src]

- `impl Default for i32x4` | [src]

- `impl Default for i16x2` | [src]

- `impl Default for m1x8` | [src]

- `impl Default for f32` | [src]

- `impl Default for AtomicBool` | [src]

- `impl<T> Default for [T; 20] where T: Default,` | [src]

- `impl<T> Default for ManuallyDrop<T> where T: Default,` | [src]

- `impl<T> Default for Empty<T>` | [src]

- `impl<A, B, C, D, E, F, G, H, I> Default for (A, B, C, D, E, F, G, H, I) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default,` | [src]

- `impl Default for i16` | [src]

- `impl Default for u32x16` | [src]

- `impl Default for f32x16` | [src]

- `impl<T> Default for Cell<T> where T: Default,` | [src]

- `impl<T> Default for RefCell<T> where T: Default,` | [src]

- `impl<T> Default for [T; 12] where T: Default,` | [src]

- `impl<A, B, C, D, E> Default for (A, B, C, D, E) where A: Default, B: Default, C: Default, D: Default, E: Default,` | [src]

- `impl Default for i16x16` | [src]

- `impl<'a> Default for &'a mut str` | [src]

- `impl<T> Default for [T; 3] where T: Default,` | [src]

- `impl Default for u32` | [src]

- `impl<A, B, C, D> Default for (A, B, C, D) where A: Default, B: Default, C: Default, D: Default,` | [src]

- `impl<T> Default for [T; 31] where T: Default,` | [src]

- `impl Default for i8x2` | [src]

- `impl Default for f32x8` | [src]

- `impl Default for f64x8` | [src]

- `impl<T> Default for [T; 30] where T: Default,` | [src]

- `impl Default for u16` | [src]

- `impl<'a, T> Default for &'a [T]` | [src]

- `impl<T> Default for PhantomData<T> where T: ?Sized,` | [src]

- `impl Default for char` | [src]

- `impl Default for i128` | [src]

- `impl<T> Default for AtomicPtr<T>` | [src]

- `impl<A, B, C, D, E, F> Default for (A, B, C, D, E, F) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default,` | [src]

- `impl Default for u16x8` | [src]

- `impl<A> Default for (A,) where A: Default,` | [src]

- `impl<A, B, C, D, E, F, G, H, I, J> Default for (A, B, C, D, E, F, G, H, I, J) where A: Default, B: Default, C: Default, D: Default, E: Default, F: Default, G: Default, H: Default, I: Default, J: Default,` | [src]

- `impl Default for f64x2` | [src]

- `impl Default for f64` | [src]

- `impl Default for u8x8` | [src]

- `impl Default for m16x16` | [src]

- `impl Default for u64` | [src]

- `impl Default for Error` | [src]

- `impl Default for AtomicI32` | [src]

- `impl Default for u64x8` | [src]

- `impl Default for m32x4` | [src]

- `impl<T> Default for [T; 15] where T: Default,` | [src]

- `impl Default for AtomicI16` | [src]

- `impl<T> Default for Rc<T> where T: Default,` | [src]

- `impl<T> Default for Box<[T]>` | [src]

- `impl<T> Default for BinaryHeap<T> where T: Ord,` | [src]

- `impl<T> Default for Box<T> where T: Default,` | [src]

- `impl<T> Default for LinkedList<T>` | [src]

- `impl Default for Global` | [src]

- `impl<K, V> Default for BTreeMap<K, V> where K: Ord,` | [src]

- `impl Default for String` | [src]

- `impl<T> Default for BTreeSet<T> where T: Ord,` | [src]

- `impl<T> Default for Arc<T> where T: Default,` | [src]

- `impl<T> Default for std::rc::Weak<T>` | [src]

- `impl<'a, B> Default for Cow<'a, B> where B: ToOwned + ?Sized, <B as ToOwned>::Owned: Default,` | [src]

- `impl Default for Box<str>` | [src]

- `impl<T> Default for std::sync::Weak<T>` | [src]

- `impl<T> Default for Vec<T>` | [src]

- `impl<T> Default for VecDeque<T>` | [src]

- `impl<K, V, S> Default for HashMap<K, V, S> where K: Eq + Hash, S: BuildHasher + Default,` | [src]

- `impl Default for DefaultHasher` | [src]

- `impl Default for RandomState` | [src]

- `impl<T, S> Default for HashSet<T, S> where T: Eq + Hash, S: BuildHasher + Default,` | [src]

- `impl<'a> Default for &'a CStr` | [src]

- `impl Default for CString` | [src]

- `impl Default for Box<CStr>` | [src]

- `impl Default for OsString` | [src]

- `impl Default for Box<OsStr>` | [src]

- `impl<'a> Default for &'a OsStr` | [src]

- `impl Default for PathBuf` | [src]

- `impl Default for Condvar` | [src]

- `impl<T: ?Sized + Default> Default for Mutex<T>` | [src]

- `impl<T: Default> Default for RwLock<T>` | [src]

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse 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`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)