考虑以下代码:
use std::collections::HashMap;
type KeyCode = char;
type CmdType = Fn(&mut E);
struct E {
key_map: HashMap<KeyCode, Box<CmdType>>,
}
impl E {
fn map_key(&mut self, key: KeyCode, function: Box<CmdType>) {
self.key_map.insert(key, function);
}
fn quit(&mut self) { println!("quitting"); /* ... */ }
}
fn main() {
let mut e = E { key_map: HashMap::new() };
e.map_key('q', Box::new(|e: &mut E| e.quit()));
match e.key_map.get(&'q') {
Some(f) => f(&mut e),
None => {}
}
}
无法编译,因为我试图传递e
给f
:
不能借用
e
为可变的,因为e.key_map
它也被借用为不可变的
但是当借完的时候e.key_map
我就再也无法接触到了f
。那么我如何准确地调用地图内的闭包呢?