November 2017
Intermediate to advanced
264 pages
5h 45m
English
In the previous chapter we introduced the concept of a moving closure, which takes ownership of its variables. The following code illustrates clearly the difference between a normal closure and a moving closure:
// see code in Chapter 7/code/moving_closure.rs
struct Block {
number: i32
}
fn main() {
let block = Block{ number:1 };
// ordinary closure:
let closure = || { println!("n: {:?}", block.number); };
closure();
println!("n: {:?}", block.number);
let block = Block{ number:1 };
// moving closure:
// closure takes ownership of the block value
let closure = move || {println!("n: {:?}", block.number); };
closure();
// error: use of moved value: `block.number`
// println!("n: {:?}", block.number);
}
This prints out the following ...
Read now
Unlock full access