pub trait Default: Sized {
// Required method
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 struct
s
that define a set of options:
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 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 derive
d, it will use the default value for each field’s type.
§enum
s
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§
1.0.0 · Sourcefn default() -> Self
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();
Making your own:
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
impl Default for &str
ferrocene_certified
only.impl Default for &CStr
ferrocene_certified
only.impl Default for &mut str
ferrocene_certified
only.impl Default for Char
impl Default for bool
impl Default for char
impl Default for f16
impl Default for f32
impl Default for f64
impl Default for f128
impl Default for i8
impl Default for i16
impl Default for i32
impl Default for i64
impl Default for i128
impl Default for isize
impl Default for u8
impl Default for u16
impl Default for u32
impl Default for u64
impl Default for u128
impl Default for ()
impl Default for usize
impl Default for Error
impl Default for FormattingOptions
ferrocene_certified
only.impl Default for SipHasher
ferrocene_certified
only.impl Default for PhantomPinned
impl Default for RangeFull
impl Default for Alignment
ferrocene_certified
only.Returns Alignment::MIN
, which is valid for any type.
impl Default for AtomicBool
ferrocene_certified
only.impl Default for AtomicI8
impl Default for AtomicI16
impl Default for AtomicI32
impl Default for AtomicI64
impl Default for AtomicIsize
impl Default for AtomicU8
impl Default for AtomicU16
impl Default for AtomicU32
impl Default for AtomicU64
impl Default for AtomicUsize
impl Default for Duration
ferrocene_certified
only.impl<'a> Default for &'a ByteStr
ferrocene_certified
only.impl<'a> Default for &'a mut ByteStr
ferrocene_certified
only.impl<'a> Default for PhantomContravariantLifetime<'a>
ferrocene_certified
only.impl<'a> Default for PhantomCovariantLifetime<'a>
ferrocene_certified
only.impl<'a> Default for PhantomInvariantLifetime<'a>
ferrocene_certified
only.impl<A: Default, B: Default> Default for Chain<A, B>
ferrocene_certified
only.impl<H> Default for BuildHasherDefault<H>
ferrocene_certified
only.impl<I> Default for Flatten<I>
ferrocene_certified
only.impl<I: Default> Default for Cloned<I>
ferrocene_certified
only.impl<I: Default> Default for Copied<I>
ferrocene_certified
only.impl<I: Default> Default for Enumerate<I>
ferrocene_certified
only.impl<I: Default> Default for Fuse<I>
ferrocene_certified
only.impl<I: Default> Default for Rev<I>
ferrocene_certified
only.impl<Idx: Default> Default for core::ops::Range<Idx>
impl<Idx: Default> Default for core::range::Range<Idx>
ferrocene_certified
only.impl<T> Default for &[T]
ferrocene_certified
only.impl<T> Default for &mut [T]
ferrocene_certified
only.impl<T> Default for Option<T>
impl<T> Default for [T; 0]
impl<T> Default for [T; 1]where
T: Default,
impl<T> Default for [T; 2]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> 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; 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; 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 OnceCell<T>
ferrocene_certified
only.impl<T> Default for Empty<T>
ferrocene_certified
only.impl<T> Default for PhantomContravariant<T>where
T: ?Sized,
ferrocene_certified
only.impl<T> Default for PhantomCovariant<T>where
T: ?Sized,
ferrocene_certified
only.impl<T> Default for PhantomInvariant<T>where
T: ?Sized,
ferrocene_certified
only.impl<T> Default for Iter<'_, T>
ferrocene_certified
only.impl<T> Default for IterMut<'_, T>
ferrocene_certified
only.impl<T> Default for AtomicPtr<T>
ferrocene_certified
only.impl<T, const N: usize> Default for IntoIter<T, N>
ferrocene_certified
only.impl<T, const N: usize> Default for Mask<T, N>
ferrocene_certified
only.impl<T, const N: usize> Default for Simd<T, N>
ferrocene_certified
only.impl<T: PointeeSized> Default for PhantomData<T>
ferrocene_certified
only.impl<T: Default + ?Sized> Default for ManuallyDrop<T>
ferrocene_certified
only.impl<T: Default + ?Sized> Default for Exclusive<T>
ferrocene_certified
only.impl<T: Default> Default for (T₁, T₂, …, Tₙ)
ferrocene_certified
only.This trait is implemented for tuples up to twelve items long.
impl<T: Default> Default for Cell<T>
ferrocene_certified
only.impl<T: Default> Default for LazyCell<T>
ferrocene_certified
only.impl<T: Default> Default for RefCell<T>
ferrocene_certified
only.impl<T: Default> Default for SyncUnsafeCell<T>
ferrocene_certified
only.impl<T: Default> Default for UnsafeCell<T>
ferrocene_certified
only.impl<T: Default> Default for Reverse<T>
impl<T: Default> Default for Saturating<T>
ferrocene_certified
only.impl<T: Default> Default for Wrapping<T>
ferrocene_certified
only.impl<T: Default> Default for AssertUnwindSafe<T>
ferrocene_certified
only.impl<T: Default> Default for UnsafePinned<T>
ferrocene_certified
only.impl<T: ?Sized + Thin> Default for *const T
ferrocene_certified
only.impl<T: ?Sized + Thin> Default for *mut T
ferrocene_certified
only.