Add an example about the behaviour of move and Fn* traits

This commit is contained in:
Alexis Bourget 2020-08-08 15:57:17 +02:00
parent d243fa109f
commit 1cd8dffdae

View File

@ -945,11 +945,6 @@ mod mod_keyword {}
/// `move` converts any variables captured by reference or mutable reference
/// to owned by value variables.
///
/// Note: `move` closures may still implement [`Fn`] or [`FnMut`], even though
/// they capture variables by `move`. This is because the traits implemented by
/// a closure type are determined by *what* the closure does with captured
/// values, not *how* it captures them.
///
/// ```rust
/// let capture = "hello";
/// let closure = move || {
@ -957,6 +952,23 @@ mod mod_keyword {}
/// };
/// ```
///
/// Note: `move` closures may still implement [`Fn`] or [`FnMut`], even though
/// they capture variables by `move`. This is because the traits implemented by
/// a closure type are determined by *what* the closure does with captured
/// values, not *how* it captures them:
///
/// ```rust
/// fn create_fn() -> impl Fn() {
/// let text = "Fn".to_owned();
///
/// move || println!("This is a: {}", text)
/// }
///
/// let fn_plain = create_fn();
///
/// fn_plain();
/// ```
///
/// `move` is often used when [threads] are involved.
///
/// ```rust