FnOnce: 旨在强调传入的闭包中含有 moved 进来的变量 ( self), 即意味着这个闭包只能被调用一次.
从 Rust By Example 中的例子可以看到一个符合 FnOnce 的闭包的构建方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
letmut farewell = "goodbye".to_owned();
// Capture 2 variables: `greeting` by reference and // `farewell` by value. letdiary = || { // `greeting` is by reference: requires `Fn`. println!("I said {}.", greeting);
// Mutation forces `farewell` to be captured by // mutable reference. Now requires `FnMut`. farewell.push_str("!!!"); println!("Then I screamed {}.", farewell); println!("Now I can sleep. zzzzz");
// Manually calling drop forces `farewell` to // be captured by value. Now requires `FnOnce`. mem::drop(farewell); };