pub trait Default { 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, }
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() }; }
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.
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 } }
#[derive(Default)] struct SomeOptions { foo: i32, bar: f32, }
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.
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 } }
impl Default for bool
[src]
impl Default for char
[src]
impl Default for f32
[src]
impl Default for f64
[src]
impl Default for i8
[src]
impl Default for i16
[src]
impl Default for i32
[src]
impl Default for i64
[src]
impl Default for i128
[src]
impl Default for isize
[src]
impl Default for u8
[src]
impl Default for u16
[src]
impl Default for u32
[src]
impl Default for u64
[src]
impl Default for u128
[src]
impl Default for ()
[src]
impl Default for usize
[src]
impl Default for Global
[src]
impl Default for System
[src]
impl Default for Box<str>
[src]
fn default() -> Box<str>ⓘNotable traits for Box<F>
impl<F> Future for Box<F> where
F: Unpin + Future + ?Sized,
type Output = <F as Future>::Output;
impl<I> Iterator for Box<I> where
I: Iterator + ?Sized,
type Item = <I as Iterator>::Item;
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>
[src]
impl Default for Box<CStr>
[src]
fn default() -> Box<CStr>ⓘNotable traits for Box<F>
impl<F> Future for Box<F> where
F: Unpin + Future + ?Sized,
type Output = <F as Future>::Output;
impl<I> Iterator for Box<I> where
I: Iterator + ?Sized,
type Item = <I as Iterator>::Item;
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>
[src]
impl Default for Box<OsStr>
[src]
fn default() -> Box<OsStr>ⓘNotable traits for Box<F>
impl<F> Future for Box<F> where
F: Unpin + Future + ?Sized,
type Output = <F as Future>::Output;
impl<I> Iterator for Box<I> where
I: Iterator + ?Sized,
type Item = <I as Iterator>::Item;
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>
[src]
impl Default for DefaultHasher
[src]
fn default() -> DefaultHasher
[src]
Creates a new DefaultHasher
using new
. See its documentation for more.
impl Default for RandomState
[src]
fn default() -> RandomState
[src]
Constructs a new RandomState
.
impl Default for CString
[src]
impl Default for OsString
[src]
impl Default for Error
[src]
impl Default for SipHasher
[src]
impl Default for RangeFull
[src]
impl Default for PathBuf
[src]
impl Default for String
[src]
impl Default for AtomicBool
[src]
fn default() -> AtomicBool
[src]
Creates an AtomicBool
initialized to false
.
impl Default for AtomicI8
[src]
impl Default for AtomicI16
[src]
impl Default for AtomicI32
[src]
impl Default for AtomicI64
[src]
impl Default for AtomicIsize
[src]
fn default() -> AtomicIsize
[src]
impl Default for AtomicU8
[src]
impl Default for AtomicU16
[src]
impl Default for AtomicU32
[src]
impl Default for AtomicU64
[src]
impl Default for AtomicUsize
[src]
fn default() -> AtomicUsize
[src]
impl Default for Condvar
[src]
impl Default for Duration
[src]
impl<'_> Default for &'_ str
[src]
impl<'_> Default for &'_ CStr
[src]
impl<'_> Default for &'_ OsStr
[src]
impl<'_> Default for &'_ mut str
[src]
impl<'_, B> Default for Cow<'_, B> where
B: ToOwned + ?Sized,
<B as ToOwned>::Owned: Default,
[src]
fn default() -> Cow<'_, B>
[src]
Creates an owned Cow<'a, B> with the default value for the contained owned value.
impl<'_, T> Default for &'_ [T]
[src]
fn default() -> &'_ [T]ⓘNotable traits for &'_ [u8]
impl<'_> Read for &'_ [u8]
impl<'_> Write for &'_ mut [u8]
[src]
Creates an empty slice.
impl<'_, T> Default for &'_ mut [T]
[src]
fn default() -> &'_ mut [T]ⓘNotable traits for &'_ [u8]
impl<'_> Read for &'_ [u8]
impl<'_> Write for &'_ mut [u8]
[src]
Creates a mutable empty slice.
impl<A> Default for (A,) where
A: Default,
[src]
impl<A, B> Default for (A, B) where
A: Default,
B: Default,
[src]
impl<A, B, C> Default for (A, B, C) where
A: Default,
B: Default,
C: Default,
[src]
impl<A, B, C, D> Default for (A, B, C, D) where
A: Default,
B: Default,
C: Default,
D: Default,
[src]
impl<A, B, C, D, E> Default for (A, B, C, D, E) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
[src]
impl<A, B, C, D, E, F> Default for (A, B, C, D, E, F) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
F: Default,
[src]
impl<A, B, C, D, E, F, G> Default for (A, B, C, D, E, F, G) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
F: Default,
G: Default,
[src]
impl<A, B, C, D, E, F, G, H> Default for (A, B, C, D, E, F, G, H) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
F: Default,
G: Default,
H: Default,
[src]
impl<A, B, C, D, E, F, G, H, I> Default for (A, B, C, D, E, F, G, H, I) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
F: Default,
G: Default,
H: Default,
I: Default,
[src]
impl<A, B, C, D, E, F, G, H, I, J> Default for (A, B, C, D, E, F, G, H, I, J) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
F: Default,
G: Default,
H: Default,
I: Default,
J: Default,
[src]
impl<A, B, C, D, E, F, G, H, I, J, K> Default for (A, B, C, D, E, F, G, H, I, J, K) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
F: Default,
G: Default,
H: Default,
I: Default,
J: Default,
K: Default,
[src]
impl<A, B, C, D, E, F, G, H, I, J, K, L> Default for (A, B, C, D, E, F, G, H, I, J, K, L) where
A: Default,
B: Default,
C: Default,
D: Default,
E: Default,
F: Default,
G: Default,
H: Default,
I: Default,
J: Default,
K: Default,
L: Default,
[src]
impl<H> Default for BuildHasherDefault<H>
[src]
fn default() -> BuildHasherDefault<H>
[src]
impl<Idx> Default for Range<Idx> where
Idx: Default,
[src]
fn default() -> Range<Idx>ⓘNotable traits for Range<A>
impl<A> Iterator for Range<A> where
A: Step,
type Item = A;
[src]
impl<K, V> Default for BTreeMap<K, V> where
K: Ord,
[src]
impl<K, V, S> Default for HashMap<K, V, S> where
S: Default,
[src]
fn default() -> HashMap<K, V, S>
[src]
Creates an empty HashMap<K, V, S>
, with the Default
value for the hasher.
impl<T> Default for Option<T>
[src]
impl<T> Default for [T; 0]
[src]
impl<T> Default for [T; 1] where
T: Default,
[src]
impl<T> Default for [T; 2] where
T: Default,
[src]
impl<T> Default for [T; 3] where
T: Default,
[src]
impl<T> Default for [T; 4] where
T: Default,
[src]
impl<T> Default for [T; 5] where
T: Default,
[src]
impl<T> Default for [T; 6] where
T: Default,
[src]
impl<T> Default for [T; 7] where
T: Default,
[src]
impl<T> Default for [T; 8] where
T: Default,
[src]
impl<T> Default for [T; 9] where
T: Default,
[src]
impl<T> Default for [T; 10] where
T: Default,
[src]
impl<T> Default for [T; 11] where
T: Default,
[src]
impl<T> Default for [T; 12] where
T: Default,
[src]
impl<T> Default for [T; 13] where
T: Default,
[src]
impl<T> Default for [T; 14] where
T: Default,
[src]
impl<T> Default for [T; 15] where
T: Default,
[src]
impl<T> Default for [T; 16] where
T: Default,
[src]
impl<T> Default for [T; 17] where
T: Default,
[src]
impl<T> Default for [T; 18] where
T: Default,
[src]
impl<T> Default for [T; 19] where
T: Default,
[src]
impl<T> Default for [T; 20] where
T: Default,
[src]
impl<T> Default for [T; 21] where
T: Default,
[src]
impl<T> Default for [T; 22] where
T: Default,
[src]
impl<T> Default for [T; 23] where
T: Default,
[src]
impl<T> Default for [T; 24] where
T: Default,
[src]
impl<T> Default for [T; 25] where
T: Default,
[src]
impl<T> Default for [T; 26] where
T: Default,
[src]
impl<T> Default for [T; 27] where
T: Default,
[src]
impl<T> Default for [T; 28] where
T: Default,
[src]
impl<T> Default for [T; 29] where
T: Default,
[src]
impl<T> Default for [T; 30] where
T: Default,
[src]
impl<T> Default for [T; 31] where
T: Default,
[src]
impl<T> Default for [T; 32] where
T: Default,
[src]
impl<T> Default for Box<[T]>
[src]
fn default() -> Box<[T]>ⓘNotable traits for Box<F>
impl<F> Future for Box<F> where
F: Unpin + Future + ?Sized,
type Output = <F as Future>::Output;
impl<I> Iterator for Box<I> where
I: Iterator + ?Sized,
type Item = <I as Iterator>::Item;
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>
[src]
impl<T> Default for Box<T> where
T: Default,
[src]
fn default() -> Box<T>ⓘNotable traits for Box<F>
impl<F> Future for Box<F> where
F: Unpin + Future + ?Sized,
type Output = <F as Future>::Output;
impl<I> Iterator for Box<I> where
I: Iterator + ?Sized,
type Item = <I as Iterator>::Item;
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>
[src]
Creates a Box<T>
, with the Default
value for T.
impl<T> Default for Cell<T> where
T: Default,
[src]
impl<T> Default for RefCell<T> where
T: Default,
[src]
impl<T> Default for UnsafeCell<T> where
T: Default,
[src]
fn default() -> UnsafeCell<T>
[src]
Creates an UnsafeCell
, with the Default
value for T.
impl<T> Default for Reverse<T> where
T: Default,
[src]
impl<T> Default for BTreeSet<T> where
T: Ord,
[src]
impl<T> Default for BinaryHeap<T> where
T: Ord,
[src]
fn default() -> BinaryHeap<T>
[src]
Creates an empty BinaryHeap<T>
.
impl<T> Default for LinkedList<T>
[src]
fn default() -> LinkedList<T>
[src]
Creates an empty LinkedList<T>
.
impl<T> Default for VecDeque<T>
[src]
impl<T> Default for Empty<T>
[src]
fn default() -> Empty<T>ⓘNotable traits for Empty<T>
impl<T> Iterator for Empty<T>
type Item = T;
[src]
impl<T> Default for Lazy<T, fn() -> T> where
T: Default,
[src]
fn default() -> Lazy<T, fn() -> T>
[src]
Creates a new lazy value using Default
as the initializing function.
impl<T> Default for OnceCell<T>
[src]
impl<T> Default for SyncOnceCell<T>
[src]
fn default() -> SyncOnceCell<T>
[src]
impl<T> Default for PhantomData<T> where
T: ?Sized,
[src]
fn default() -> PhantomData<T>
[src]
impl<T> Default for ManuallyDrop<T> where
T: Default + ?Sized,
[src]
fn default() -> ManuallyDrop<T>
[src]
impl<T> Default for Wrapping<T> where
T: Default,
[src]
impl<T> Default for Rc<T> where
T: Default,
[src]
fn default() -> Rc<T>
[src]
Creates a new Rc<T>
, with the Default
value for T
.
use std::rc::Rc; let x: Rc<i32> = Default::default(); assert_eq!(*x, 0);
impl<T> Default for std::rc::Weak<T>
[src]
impl<T> Default for AtomicPtr<T>
[src]
impl<T> Default for Arc<T> where
T: Default,
[src]
fn default() -> Arc<T>
[src]
Creates a new Arc<T>
, with the Default
value for T
.
use std::sync::Arc; let x: Arc<i32> = Default::default(); assert_eq!(*x, 0);
impl<T> Default for std::sync::Weak<T>
[src]
impl<T> Default for Vec<T>
[src]
fn default() -> Vec<T>ⓘNotable traits for Vec<u8>
impl Write for Vec<u8>
[src]
Creates an empty Vec<T>
.
impl<T, S> Default for HashSet<T, S> where
S: Default,
[src]
fn default() -> HashSet<T, S>
[src]
Creates an empty HashSet<T, S>
with the Default
value for the hasher.
impl<T: Default> Default for Cursor<T>
[src]
fn default() -> Cursor<T>ⓘNotable traits for Cursor<T>
impl<T> Read for Cursor<T> where
T: AsRef<[u8]>,
impl<'_> Write for Cursor<&'_ mut [u8]>
impl<'_> Write for Cursor<&'_ mut Vec<u8>>
impl Write for Cursor<Vec<u8>>
impl Write for Cursor<Box<[u8]>>
[src]
impl<T: Default> Default for SyncLazy<T>
[src]
fn default() -> SyncLazy<T>
[src]
Creates a new lazy value using Default
as the initializing function.
impl<T: Default> Default for RwLock<T>
[src]
impl<T: ?Sized + Default> Default for Mutex<T>
[src]
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/default/trait.Default.html