Trait Default
pub trait Default: Sized
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:
#
How can we define some default values? You can use Default:
#
Now, you get all of the default values. Rust implements Default for various primitive types.
If you want to override a particular option, but still retain the other defaults:
#
#
#
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.
enums
When using #[derive(Default)] on an enum, you need to choose which unit variant will be
default. You do this by placing the #[default] attribute on the variant.
You cannot use the #[default] attribute on non-unit or non-exhaustive variants.
The #[default] attribute was stabilized in Rust 1.62.0.
How can I implement Default?
Provide an implementation for the default() method that returns the value of
your type that should be the default:
#
Examples
#
Required Methods
fn default() -> SelfReturns 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 = Defaultdefault; let : = Defaultdefault; let : = Defaultdefault;Making your own:
#
Implementors
impl Default for &CStrimpl Default for &mut strimpl Default for &strimpl Default for ()impl Default for Abiimpl Default for Alignmentimpl Default for AtomicBoolimpl Default for AtomicI128impl Default for AtomicI16impl Default for AtomicI32impl Default for AtomicI64impl Default for AtomicI8impl Default for AtomicIsizeimpl Default for AtomicU128impl Default for AtomicU16impl Default for AtomicU32impl Default for AtomicU64impl Default for AtomicU8impl Default for AtomicUsizeimpl Default for BiasedFpimpl Default for Charimpl Default for CodePointInnerimpl Default for Decimalimpl Default for DecimalSeqimpl Default for Durationimpl Default for Emptyimpl Default for Errorimpl Default for FormattingOptionsimpl Default for Nanosecondsimpl Default for PadAdapterStateimpl Default for PhantomPinnedimpl Default for RangeFullimpl Default for Sinkimpl Default for Sip13Roundsimpl Default for Sip24Roundsimpl Default for SipHasherimpl Default for SipHasher13impl Default for SipHasher24impl Default for Spanimpl Default for boolimpl Default for charimpl Default for f128impl Default for f16impl Default for f32impl Default for f64impl Default for i128impl Default for i16impl Default for i32impl Default for i64impl Default for i8impl Default for isizeimpl Default for u128impl Default for u16impl Default for u32impl Default for u64impl Default for u8impl Default for usizeimpl<'a> Default for &'a ByteStrimpl<'a> Default for &'a mut ByteStrimpl<'a> Default for PhantomContravariantLifetime<'a>impl<'a> Default for PhantomCovariantLifetime<'a>impl<'a> Default for PhantomInvariantLifetime<'a>impl<A> Default for RepeatN<A>impl<A: Default, B: Default> Default for Chain<A, B>impl<A: ~const Default, Z: ~const Default, Y: ~const Default, X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (A, Z, Y, X, W, V, U, T)impl<B: ~const Default, A: ~const Default, Z: ~const Default, Y: ~const Default, X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (B, A, Z, Y, X, W, V, U, T)impl<C: ~const Default, B: ~const Default, A: ~const Default, Z: ~const Default, Y: ~const Default, X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (C, B, A, Z, Y, X, W, V, U, T)impl<D: ~const Default, C: ~const Default, B: ~const Default, A: ~const Default, Z: ~const Default, Y: ~const Default, X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (D, C, B, A, Z, Y, X, W, V, U, T)impl<E: ~const Default, D: ~const Default, C: ~const Default, B: ~const Default, A: ~const Default, Z: ~const Default, Y: ~const Default, X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (E, D, C, B, A, Z, Y, X, W, V, U, T)impl<H> Default for BuildHasherDefault<H>impl<I> Default for Flatten<I> where I: Default + Iterator<Item: IntoIterator>,impl<I: Default> Default for Cloned<I>impl<I: Default> Default for Copied<I>impl<I: Default> Default for Enumerate<I>impl<I: Default> Default for Fuse<I>impl<I: Default> Default for Rev<I>impl<Idx: ~const Default> Default for Range<Idx>impl<Idx: ~const Default> Default for Range<Idx>impl<P: Default + ?Sized> Default for MaybeDangling<P>impl<S: Sip> Default for Hasher<S>impl<T> Default for &[T]impl<T> Default for &mut [T]impl<T> Default for AtomicPtr<T>impl<T> Default for Empty<T>impl<T> Default for Iter<'_, T>impl<T> Default for IterMut<'_, T>impl<T> Default for OnceCell<T>impl<T> Default for Option<T>impl<T> Default for PhantomContravariant<T> where T: ?Sized,impl<T> Default for PhantomCovariant<T> where T: ?Sized,impl<T> Default for PhantomInvariant<T> where T: ?Sized,impl<T> Default for SyncView<T> where T: ~const Default,impl<T> Default for [T; 0]impl<T> Default for [T; 10] where T: Default,impl<T> Default for [T; 11] where T: Default,impl<T> Default for [T; 12] where T: Default,impl<T> Default for [T; 13] where T: Default,impl<T> Default for [T; 14] where T: Default,impl<T> Default for [T; 15] where T: Default,impl<T> Default for [T; 16] where T: Default,impl<T> Default for [T; 17] where T: Default,impl<T> Default for [T; 18] where T: Default,impl<T> Default for [T; 19] where T: Default,impl<T> Default for [T; 1] where T: Default,impl<T> Default for [T; 20] where T: Default,impl<T> Default for [T; 21] where T: Default,impl<T> Default for [T; 22] where T: Default,impl<T> Default for [T; 23] where T: Default,impl<T> Default for [T; 24] where T: Default,impl<T> Default for [T; 25] where T: Default,impl<T> Default for [T; 26] where T: Default,impl<T> Default for [T; 27] where T: Default,impl<T> Default for [T; 28] where T: Default,impl<T> Default for [T; 29] where T: Default,impl<T> Default for [T; 2] where T: Default,impl<T> Default for [T; 30] where T: Default,impl<T> Default for [T; 31] where T: Default,impl<T> Default for [T; 32] where T: Default,impl<T> Default for [T; 3] where T: Default,impl<T> Default for [T; 4] where T: Default,impl<T> Default for [T; 5] where T: Default,impl<T> Default for [T; 6] where T: Default,impl<T> Default for [T; 7] where T: Default,impl<T> Default for [T; 8] where T: Default,impl<T> Default for [T; 9] where T: Default,impl<T, const N: usize> Default for IntoIter<T, N>impl<T, const N: usize> Default for Mask<T, N> where T: MaskElement,impl<T, const N: usize> Default for Simd<T, N> where T: SimdElement + Default,impl<T: ?Sized + Thin> Default for *const Timpl<T: ?Sized + Thin> Default for *mut Timpl<T: ?Sized, const VARIANT: u32, const FIELD: u32> Default for FieldRepresentingType<T, VARIANT, FIELD>impl<T: Default + ?Sized> Default for ManuallyDrop<T>impl<T: Default> Default for AssertUnwindSafe<T>impl<T: Default> Default for Cursor<T>impl<T: Default> Default for LazyCell<T>impl<T: Default> Default for Saturating<T>impl<T: Default> Default for UnsafePinned<T>impl<T: Default> Default for Wrapping<T>impl<T: PointeeSized> Default for PhantomData<T>impl<T: ~const Default> Default for (T,)impl<T: ~const Default> Default for Cell<T>impl<T: ~const Default> Default for RefCell<T>impl<T: ~const Default> Default for Reverse<T>impl<T: ~const Default> Default for SyncUnsafeCell<T>impl<T: ~const Default> Default for UnsafeCell<T>impl<U: ~const Default, T: ~const Default> Default for (U, T)impl<V: ~const Default, U: ~const Default, T: ~const Default> Default for (V, U, T)impl<W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (W, V, U, T)impl<X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (X, W, V, U, T)impl<Y: ~const Default, X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (Y, X, W, V, U, T)impl<Z: ~const Default, Y: ~const Default, X: ~const Default, W: ~const Default, V: ~const Default, U: ~const Default, T: ~const Default> Default for (Z, Y, X, W, V, U, T)