captured variable in a `Fn` closure cannot assign
yaojiu19 opened this issue · comments
when i use grab, i cant modify environment variable;
let mut button_right_act= false;
let mut is_block = false;
rdev::grab(move |event| {
match event.event_type {
EventType::ButtonPress(button) => {
match button {
Button::Right => {
button_right_act = true;
is_block = false;
},
_ => {}
}
},
EventType::ButtonRelease(button) => {
match button {
Button::Right => {
button_right_act = false;
},
_ => {}
}
},
EventType::MouseMove { x, y } => {
if button_right_act {
if x > 100.0 {
is_block = true;
}
}
},
_ => {}
}
if is_block {
None
} else {
Some(event)
}
}).unwrap();
What is actually happening ?
I want move of ownership to closure, but Fn applies to closures that don’t move captured values out of their body and that don’t mutate captured values.
That's because you cannot.
You could use a global variable for that (that's unsafe but it works if your program is simple enough).
Or an Arc<Mutex<T>>