Trait Default
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<T> Default for PhantomCovariant<T>impl<H> Default for BuildHasherDefault<H>impl<T> Default for [T; 20]impl<T: ~const Default> Default for RefCell<T>impl Default for AtomicIsizeimpl Default for isizeimpl<T> Default for [T; 0]impl<T, N: usize> Default for IntoIter<T, N>impl Default for Durationimpl<T> Default for [T; 13]impl<I: Default> Default for Enumerate<I>impl Default for f32impl<T> Default for [T; 26]impl Default for AtomicI16impl Default for usizeimpl<T> Default for [T; 6]impl<T> Default for PhantomContravariant<T>impl<P: $crate::default::Default + ?Sized> Default for MaybeDangling<P>impl<T> Default for Iter<'_, T>impl<T> Default for [T; 19]impl<T: ~const Default> Default for UnsafeCell<T>impl Default for AtomicUsizeimpl Default for i8impl<'a> Default for &'a ByteStrimpl<T> Default for [T; 32]impl<T: Default> Default for UnsafePinned<T>impl<T: ?Sized + Thin> Default for *const Timpl<T: Default> Default for (T)impl<T> Default for [T; 12]impl<I> Default for Flatten<I>impl Default for f64impl<T> Default for [T; 25]impl Default for AtomicU16impl Default for u8impl<T> Default for [T; 5]impl<T> Default for PhantomInvariant<T>impl<T> Default for IterMut<'_, T>impl<T> Default for [T; 18]impl<T: ~const Default> Default for SyncUnsafeCell<T>impl<T: $crate::default::Default + ?Sized> Default for Exclusive<T>impl<T: $crate::default::Default> Default for Saturating<T>impl Default for i16impl<'a> Default for &'a mut ByteStrimpl<T> Default for [T; 31]impl<Idx: ~const $crate::default::Default> Default for Range<Idx>impl<T: ?Sized + Thin> Default for *mut Timpl<T, N: usize> Default for Mask<T, N>impl<T> Default for [T; 11]impl<I: Default> Default for Fuse<I>impl Default for f128impl Default for Alignmentimpl<T> Default for [T; 24]impl Default for AtomicI32impl Default for u16impl<T: $crate::default::Default + ?Sized> Default for ManuallyDrop<T>impl<T> Default for [T; 4]impl<T: PointeeSized> Default for PhantomData<T>impl<T> Default for &[T]impl<T> Default for [T; 17]impl Default for &CStrimpl Default for Errorimpl Default for i32impl<T> Default for [T; 30]impl Default for AtomicBoolimpl Default for ()impl<T, N: usize> Default for Simd<T, N>impl<T> Default for [T; 10]impl<I: Default> Default for Rev<I>impl<'a> Default for PhantomCovariantLifetime<'a>impl<T> Default for [T; 23]impl<T: Default> Default for LazyCell<T>impl Default for AtomicU32impl Default for u32impl<T> Default for [T; 3]impl Default for PhantomPinnedimpl<T: $crate::default::Default> Default for Wrapping<T>impl<T> Default for &mut [T]impl<T> Default for [T; 16]impl<A: Default, B: Default> Default for Chain<A, B>impl Default for i64impl<T> Default for [T; 29]impl<T> Default for AtomicPtr<T>impl Default for boolimpl<T> Default for [T; 9]impl<T> Default for Empty<T>impl<'a> Default for PhantomContravariantLifetime<'a>impl Default for FormattingOptionsimpl<T> Default for [T; 22]impl<T> Default for OnceCell<T>impl Default for AtomicI64impl Default for u64impl<T> Default for [T; 2]impl Default for RangeFullimpl Default for &strimpl<T> Default for [T; 15]impl<I: Default> Default for Cloned<I>impl Default for i128impl<T> Default for [T; 28]impl Default for AtomicI8impl Default for charimpl<T> Default for [T; 8]impl<T> Default for Option<T>impl<'a> Default for PhantomInvariantLifetime<'a>impl Default for SipHasherimpl<T> Default for [T; 21]impl<T: ~const Default> Default for Cell<T>impl Default for AtomicU64impl Default for u128impl<T> Default for [T; 1]impl<Idx: ~const $crate::default::Default> Default for Range<Idx>impl Default for &mut strimpl<T> Default for [T; 14]impl<I: Default> Default for Copied<I>impl Default for f16impl<T> Default for [T; 27]impl Default for AtomicU8impl Default for crate::ascii::Charimpl<T> Default for [T; 7]impl<T: ~const $crate::default::Default> Default for Reverse<T>impl<T: Default> Default for AssertUnwindSafe<T>