#[lang = "fn_mut"] #[must_use = "closures are lazy and do nothing unless called"] pub trait FnMut<Args>: FnOnce<Args> { extern "rust-call" fn call_mut(&mut self, args: Args) -> Self::Output; }
The version of the call operator that takes a mutable receiver.
Instances of FnMut
can be called repeatedly and may mutate state.
FnMut
is implemented automatically by closures which take mutable references to captured variables, as well as all types that implement Fn
, e.g., (safe) function pointers (since FnMut
is a supertrait of Fn
). Additionally, for any type F
that implements FnMut
, &mut F
implements FnMut
, too.
Since FnOnce
is a supertrait of FnMut
, any instance of FnMut
can be used where a FnOnce
is expected, and since Fn
is a subtrait of FnMut
, any instance of Fn
can be used where FnMut
is expected.
Use FnMut
as a bound when you want to accept a parameter of function-like type and need to call it repeatedly, while allowing it to mutate state. If you don't want the parameter to mutate state, use Fn
as a bound; if you don't need to call it repeatedly, use FnOnce
.
See the chapter on closures in The Rust Programming Language for some more information on this topic.
Also of note is the special syntax for Fn
traits (e.g. Fn(usize, bool) -> usize
). Those interested in the technical details of this can refer to the relevant section in the Rustonomicon.
FnMut
parameterfn do_twice<F>(mut func: F) where F: FnMut() { func(); func(); } let mut x: usize = 1; { let add_two_to_x = || x += 2; do_twice(add_two_to_x); } assert_eq!(x, 5);
extern "rust-call" fn call_mut(&mut self, args: Args) -> Self::Output
Performs the call operation.
impl<'_, A, F> FnMut<A> for &'_ F where
F: Fn<A> + ?Sized,
[src]
impl<'_, A, F> FnMut<A> for &'_ mut F where
F: FnMut<A> + ?Sized,
[src]
impl<A, F> FnMut<A> for Box<F> where
F: FnMut<A> + ?Sized,
[src]
extern "rust-call" fn call_mut(
&mut self,
args: A
) -> <Box<F> as FnOnce<A>>::Output
[src]
impl<I> Iterator for Box<I> where I: Iterator + ?Sized, type Item = <I as Iterator>::Item; impl<F> Future for Box<F> where F: Unpin + Future + ?Sized, type Output = <F as Future>::Output; impl<R: Read + ?Sized> Read for Box<R> impl<W: Write + ?Sized> Write for Box<W>
© 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/ops/trait.FnMut.html