pub trait Default {
    fn default() -> Self;
}
Expand description

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 structs that define a set of options:

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

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();
}

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() };
}

Derivable

This trait can be used with #[derive] if all of the type’s fields implement Default. When derived, 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 }
}

Examples

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

Required methods

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

Making your own:

enum Kind {
    A,
    B,
    C,
}

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

Implementations on Foreign Types

Creates a Condvar which is ready to be waited on and notified.

Constructs an empty OsString.

Creates a new RwLock<T>, with the Default value for T.

Constructs a new RandomState.

Creates an empty CString.

Creates an empty HashMap<K, V, S>, with the Default value for the hasher.

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

Creates a new empty cell.

Example
#![feature(once_cell)]

use std::lazy::SyncOnceCell;

fn main() {
    assert_eq!(SyncOnceCell::<()>::new(), SyncOnceCell::default());
}

Creates an empty OsStr.

Creates an empty HashSet<T, S> with the Default value for the hasher.

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

Creates a new DefaultHasher using new. See its documentation for more.

Returns the default value of 0

Returns the default value of 0.0

Returns the default value of 0

Returns the default value of \x00

Returns the default value of 0

Returns the default value of 0

Returns the default value of ()

Returns the default value of 0

Creates an empty str

Creates a mutable empty slice.

Returns the default value of false

Returns the default value of 0

Returns the default value of 0.0

Returns the default value of 0

Returns the default value of 0

Returns the default value of 0

Returns the default value of 0

Creates an empty slice.

Creates an empty mutable str

Returns the default value of 0

Returns the default value of 0

Creates an empty BinaryHeap<T>.

Creates an empty String.

Creates an empty BTreeSet.

Creates an empty LinkedList<T>.

Constructs a new Weak<T>, without allocating memory. Calling upgrade on the return value always gives None.

Examples
use std::sync::Weak;

let empty: Weak<i64> = Default::default();
assert!(empty.upgrade().is_none());

Creates an empty deque.

Creates an owned Cow<’a, B> with the default value for the contained owned value.

Creates an empty Vec<T>.

Constructs a new Weak<T>, without allocating any memory. Calling upgrade on the return value always gives None.

Examples
use std::rc::Weak;

let empty: Weak<i64> = Default::default();
assert!(empty.upgrade().is_none());

Creates a new Rc<T>, with the Default value for T.

Examples
use std::rc::Rc;

let x: Rc<i32> = Default::default();
assert_eq!(*x, 0);

Creates a new Arc<T>, with the Default value for T.

Examples
use std::sync::Arc;

let x: Arc<i32> = Default::default();
assert_eq!(*x, 0);

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

Creates an empty BTreeMap.

Return an empty IndexMap

Return an empty IndexSet

Creates an empty HashMap<K, V, S, A>, with the Default value for the hasher and allocator.

Creates an empty HashSet<T, S> with the Default value for the hasher.

Implementors

Create an empty list.