# 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() -> Self { Kind::A }
    }

Run

# Examples

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

Run

## Required methods

### `fn default() -> Self`[src]

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() -> Self { Kind::A }
    }

Run
Loading content...

## Implementors

### `impl Default for &mut str` 1.28.0[src]

#### `fn default() -> Self`[src]

Creates an empty mutable str

### `impl Default for &str`[src]

#### `fn default() -> Self`[src]

Creates an empty str

### `impl Default for ()`[src]

#### `fn default()`[src]

Returns the default value of `()`

### `impl Default for Error`[src]

#### `fn default() -> Error`[src]

### `impl Default for SipHasher`[src]

#### `fn default() -> SipHasher`[src]

### `impl Default for PhantomPinned` 1.33.0[src]

#### `fn default() -> PhantomPinned`[src]

### `impl Default for RangeFull`[src]

#### `fn default() -> RangeFull`[src]

### `impl Default for AtomicBool`[src]

#### `fn default() -> Self`[src]

Creates an `AtomicBool` initialized to `false`.

### `impl Default for AtomicI8` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicI16` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicI32` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicI64` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicIsize`[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicU8` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicU16` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicU32` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicU64` 1.34.0[src]

#### `fn default() -> Self`[src]

### `impl Default for AtomicUsize`[src]

#### `fn default() -> Self`[src]

### `impl Default for Duration` 1.3.0[src]

#### `fn default() -> Duration`[src]

### `impl Default for bool`[src]

#### `fn default() -> bool`[src]

Returns the default value of `false`

### `impl Default for char`[src]

#### `fn default() -> char`[src]

Returns the default value of `\x00`

### `impl Default for f32`[src]

#### `fn default() -> f32`[src]

Returns the default value of `0.0`

### `impl Default for f64`[src]

#### `fn default() -> f64`[src]

Returns the default value of `0.0`

### `impl Default for i8`[src]

#### `fn default() -> i8`[src]

Returns the default value of `0`

### `impl Default for i16`[src]

#### `fn default() -> i16`[src]

Returns the default value of `0`

### `impl Default for i32`[src]

#### `fn default() -> i32`[src]

Returns the default value of `0`

### `impl Default for i64`[src]

#### `fn default() -> i64`[src]

Returns the default value of `0`

### `impl Default for i128`[src]

#### `fn default() -> i128`[src]

Returns the default value of `0`

### `impl Default for isize`[src]

#### `fn default() -> isize`[src]

Returns the default value of `0`

### `impl Default for u8`[src]

#### `fn default() -> u8`[src]

Returns the default value of `0`

### `impl Default for u16`[src]

#### `fn default() -> u16`[src]

Returns the default value of `0`

### `impl Default for u32`[src]

#### `fn default() -> u32`[src]

Returns the default value of `0`

### `impl Default for u64`[src]

#### `fn default() -> u64`[src]

Returns the default value of `0`

### `impl Default for u128`[src]

#### `fn default() -> u128`[src]

Returns the default value of `0`

### `impl Default for usize`[src]

#### `fn default() -> usize`[src]

Returns the default value of `0`

### `impl<A: Default> Default for (A,)`[src]

#### `fn default() -> (A,)`[src]

### `impl<A: Default, B: Default> Default for (A, B)`[src]

#### `fn default() -> (A, B)`[src]

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

#### `fn default() -> (A, B, C)`[src]

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

#### `fn default() -> (A, B, C, D)`[src]

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

#### `fn default() -> (A, B, C, D, E)`[src]

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

#### `fn default() -> (A, B, C, D, E, F)`[src]

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

#### `fn default() -> (A, B, C, D, E, F, G)`[src]

### `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)`[src]

#### `fn default() -> (A, B, C, D, E, F, G, H)`[src]

### `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)`[src]

#### `fn default() -> (A, B, C, D, E, F, G, H, I)`[src]

### `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)`[src]

#### `fn default() -> (A, B, C, D, E, F, G, H, I, J)`[src]

### `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)`[src]

#### `fn default() -> (A, B, C, D, E, F, G, H, I, J, K)`[src]

### `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)`[src]

#### `fn default() -> (A, B, C, D, E, F, G, H, I, J, K, L)`[src]

### `impl<H> Default for BuildHasherDefault<H>`1.7.0[src]

#### `fn default() -> BuildHasherDefault<H>`[src]

### `impl<Idx: Default> Default for Range<Idx>`[src]

#### `fn default() -> Range<Idx>ⓘ

### Notable traits for Range<A>

`impl<A: Step> Iterator for Range<A> type Item = A;`
`[src]

### `impl<T> Default for &[T]`[src]

#### `fn default() -> Self`[src]

Creates an empty slice.

### `impl<T> Default for &mut [T]`1.5.0[src]

#### `fn default() -> Self`[src]

Creates a mutable empty slice.

### `impl<T> Default for Option<T>`[src]

#### `fn default() -> Option<T>`[src]

Returns `None`.

# Examples

    let opt: Option<u32> = Option::default();
    assert!(opt.is_none());

Run

### `impl<T> Default for Empty<T>`1.2.0[src]

#### `fn default() -> Empty<T>ⓘ

### Notable traits for Empty<T>

`impl<T> Iterator for Empty<T> type Item = T;`
`[src]

### `impl<T> Default for OnceCell<T>`[src]

#### `fn default() -> Self`[src]

### `impl<T> Default for AtomicPtr<T>`[src]

#### `fn default() -> AtomicPtr<T>`[src]

Creates a null `AtomicPtr<T>`.

### `impl<T> Default for [T; 0]`1.4.0[src]

#### `fn default() -> [T; 0]`[src]

### `impl<T> Default for [T; 1] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 1]`[src]

### `impl<T> Default for [T; 2] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 2]`[src]

### `impl<T> Default for [T; 3] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 3]`[src]

### `impl<T> Default for [T; 4] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 4]`[src]

### `impl<T> Default for [T; 5] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 5]`[src]

### `impl<T> Default for [T; 6] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 6]`[src]

### `impl<T> Default for [T; 7] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 7]`[src]

### `impl<T> Default for [T; 8] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 8]`[src]

### `impl<T> Default for [T; 9] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 9]`[src]

### `impl<T> Default for [T; 10] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 10]`[src]

### `impl<T> Default for [T; 11] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 11]`[src]

### `impl<T> Default for [T; 12] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 12]`[src]

### `impl<T> Default for [T; 13] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 13]`[src]

### `impl<T> Default for [T; 14] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 14]`[src]

### `impl<T> Default for [T; 15] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 15]`[src]

### `impl<T> Default for [T; 16] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 16]`[src]

### `impl<T> Default for [T; 17] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 17]`[src]

### `impl<T> Default for [T; 18] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 18]`[src]

### `impl<T> Default for [T; 19] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 19]`[src]

### `impl<T> Default for [T; 20] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 20]`[src]

### `impl<T> Default for [T; 21] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 21]`[src]

### `impl<T> Default for [T; 22] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 22]`[src]

### `impl<T> Default for [T; 23] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 23]`[src]

### `impl<T> Default for [T; 24] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 24]`[src]

### `impl<T> Default for [T; 25] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 25]`[src]

### `impl<T> Default for [T; 26] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 26]`[src]

### `impl<T> Default for [T; 27] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 27]`[src]

### `impl<T> Default for [T; 28] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 28]`[src]

### `impl<T> Default for [T; 29] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 29]`[src]

### `impl<T> Default for [T; 30] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 30]`[src]

### `impl<T> Default for [T; 31] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 31]`[src]

### `impl<T> Default for [T; 32] where
T: Default,` 1.4.0[src]

#### `fn default() -> [T; 32]`[src]

### `impl<T: Default + ?Sized> Default for ManuallyDrop<T>`1.20.0[src]

#### `fn default() -> ManuallyDrop<T>`[src]

### `impl<T: Default> Default for Cell<T>`[src]

#### `fn default() -> Cell<T>`[src]

Creates a `Cell<T>`, with the `Default` value for T.

### `impl<T: Default> Default for RefCell<T>`[src]

#### `fn default() -> RefCell<T>`[src]

Creates a `RefCell<T>`, with the `Default` value for T.

### `impl<T: Default> Default for UnsafeCell<T>`1.10.0[src]

#### `fn default() -> UnsafeCell<T>`[src]

Creates an `UnsafeCell`, with the `Default` value for T.

### `impl<T: Default> Default for Reverse<T>`1.19.0[src]

#### `fn default() -> Reverse<T>`[src]

### `impl<T: Default> Default for Lazy<T>`[src]

#### `fn default() -> Lazy<T>`[src]

Creates a new lazy value using `Default` as the initializing function.

### `impl<T: Default> Default for Wrapping<T>`[src]

#### `fn default() -> Wrapping<T>`[src]

### `impl<T: ?Sized> Default for PhantomData<T>`[src]

#### `fn default() -> Self`[src]

Loading content...