Trait tract_nnef::internal::tract_downcast_rs::__std::ops::DerefMut 1.0.0[−][src]
#[lang = "deref_mut"] pub trait DerefMut: Deref { pub fn deref_mut(&mut self) -> &mut Self::Target; }
Used for mutable dereferencing operations, like in *v = 1;
.
In addition to being used for explicit dereferencing operations with the
(unary) *
operator in mutable contexts, DerefMut
is also used implicitly
by the compiler in many circumstances. This mechanism is called
‘Deref
coercion’. In immutable contexts, Deref
is used.
Implementing DerefMut
for smart pointers makes mutating the data behind
them convenient, which is why they implement DerefMut
. On the other hand,
the rules regarding Deref
and DerefMut
were designed specifically to
accommodate smart pointers. Because of this, DerefMut
should only be
implemented for smart pointers to avoid confusion.
For similar reasons, this trait should never fail. Failure during
dereferencing can be extremely confusing when DerefMut
is invoked
implicitly.
More on Deref
coercion
If T
implements DerefMut<Target = U>
, and x
is a value of type T
,
then:
- In mutable contexts,
*x
(whereT
is neither a reference nor a raw pointer) is equivalent to*DerefMut::deref_mut(&mut x)
. - Values of type
&mut T
are coerced to values of type&mut U
T
implicitly implements all the (mutable) methods of the typeU
.
For more details, visit the chapter in The Rust Programming Language as well as the reference sections on the dereference operator, method resolution and type coercions.
Examples
A struct with a single field which is modifiable by dereferencing the struct.
use std::ops::{Deref, DerefMut}; struct DerefMutExample<T> { value: T } impl<T> Deref for DerefMutExample<T> { type Target = T; fn deref(&self) -> &Self::Target { &self.value } } impl<T> DerefMut for DerefMutExample<T> { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.value } } let mut x = DerefMutExample { value: 'a' }; *x = 'b'; assert_eq!('b', *x);
Required methods
Loading content...Implementations on Foreign Types
impl<'_, T> DerefMut for &'_ mut T where
T: ?Sized,
[src]
T: ?Sized,
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<'_, T> !DerefMut for &'_ T where
T: ?Sized,
[src]
T: ?Sized,
impl<O, T> DerefMut for BitVec<O, T> where
O: BitOrder,
T: BitStore,
O: BitOrder,
T: BitStore,
pub fn deref_mut(&mut self) -> &mut <BitVec<O, T> as Deref>::TargetⓘNotable traits for BitVec<O, T>
impl<O, T> Write for BitVec<O, T> where
O: BitOrder,
T: BitStore,
BitSlice<O, <T as BitStore>::Alias>: BitField,
Notable traits for BitVec<O, T>
impl<O, T> Write for BitVec<O, T> where
O: BitOrder,
T: BitStore,
BitSlice<O, <T as BitStore>::Alias>: BitField,
impl<O, V> DerefMut for BitArray<O, V> where
O: BitOrder,
V: BitView,
O: BitOrder,
V: BitView,
impl<O, T> DerefMut for BitBox<O, T> where
O: BitOrder,
T: BitStore,
O: BitOrder,
T: BitStore,
impl<'_, O, T> DerefMut for BitMut<'_, O, T> where
O: BitOrder,
T: BitStore,
O: BitOrder,
T: BitStore,
impl<T> DerefMut for FmtUpperHex<T> where
T: UpperHex,
T: UpperHex,
impl<T> DerefMut for FmtLowerHex<T> where
T: LowerHex,
T: LowerHex,
impl<T> DerefMut for FmtOctal<T> where
T: Octal,
T: Octal,
impl<T> DerefMut for FmtPointer<T> where
T: Pointer,
T: Pointer,
impl<T> DerefMut for FmtLowerExp<T> where
T: LowerExp,
T: LowerExp,
impl<T> DerefMut for FmtUpperExp<T> where
T: UpperExp,
T: UpperExp,
impl<T> DerefMut for FmtBinary<T> where
T: Binary,
T: Binary,
impl<T> DerefMut for FmtDisplay<T> where
T: Display,
T: Display,
impl<A> DerefMut for ArrayString<A> where
A: Array<Item = u8> + Copy,
[src]
A: Array<Item = u8> + Copy,
impl<A> DerefMut for ArrayVec<A> where
A: Array,
[src]
Loading content...A: Array,
Implementors
impl DerefMut for Error
[src]
impl DerefMut for IxDynImpl
[src]
impl DerefMut for String
1.3.0[src]
impl DerefMut for OsString
1.44.0[src]
impl<'_, T> DerefMut for RefMut<'_, T> where
T: ?Sized,
[src]
T: ?Sized,
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<'_, T> DerefMut for PeekMut<'_, T> where
T: Ord,
1.12.0[src]
T: Ord,
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<'_, T> DerefMut for MutexGuard<'_, T> where
T: ?Sized,
[src]
T: ?Sized,
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<'_, T> DerefMut for RwLockWriteGuard<'_, T> where
T: ?Sized,
[src]
T: ?Sized,
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<'a> DerefMut for IoSliceMut<'a>
1.36.0[src]
impl<'a, 'f> DerefMut for VaList<'a, 'f> where
'f: 'a,
[src]
'f: 'a,
pub fn deref_mut(&mut self) -> &mut VaListImpl<'f>
[src]
impl<A> DerefMut for SmallVec<A> where
A: Array,
A: Array,
impl<F, O> DerefMut for ModelPatch<F, O> where
O: Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + 'static + Hash,
F: Fact + Clone + 'static + Hash,
[src]
O: Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + 'static + Hash,
F: Fact + Clone + 'static + Hash,
impl<L, R> DerefMut for Either<L, R> where
R: DerefMut<Target = <L as Deref>::Target>,
L: DerefMut,
[src]
R: DerefMut<Target = <L as Deref>::Target>,
L: DerefMut,
impl<P> DerefMut for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Unpin,
1.33.0[src]
P: DerefMut,
<P as Deref>::Target: Unpin,
impl<T> DerefMut for MathCell<T>
[src]
impl<T> DerefMut for ManuallyDrop<T> where
T: ?Sized,
1.20.0[src]
T: ?Sized,
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<T> DerefMut for AssertUnwindSafe<T>
1.9.0[src]
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<T, A> DerefMut for Box<T, A> where
T: ?Sized,
A: Allocator,
[src]
T: ?Sized,
A: Allocator,
pub fn deref_mut(&mut self) -> &mut TⓘNotable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
[src]
Notable traits for &'_ mut R
impl<'_, R> Read for &'_ mut R where
R: Read + ?Sized, impl<'_, W> Write for &'_ mut W where
W: Write + ?Sized, impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output;
impl<T, A> DerefMut for Vec<T, A> where
A: Allocator,
[src]
A: Allocator,