函数声明中更具体的自我

时间:2015-08-06 22:07:28

标签: rust borrow-checker

鉴于此代码:

pub fn handle_events(&mut self) {
    use self::glium::glutin::Event;
    for ev in self.display.poll_events() {
        match ev {
            Event::Closed => self.state = GameState::Exiting,
            Event::KeyboardInput(state, _, Some(key))
                if self.input.keys_pressed.contains_key(&key) =>
                    self.handle_keyboard(state, key),
            _ => (),
        }
    }
}

fn handle_keyboard(&mut self, state: ElementState, key: VirtualKeyCode) {
    ...
}

Rust在self.handle_keyboard(state, key)抱怨我不能借用self的可变引用,因为我已经在行self.display中对for ev in self.display.poll_events() {进行了不可变的借用。

如果我只想修改self中不在self.display中的字段,是否可以指定编译器?它会是这样的:

fn handle_keyboard(&mut self.field, ...)

1 个答案:

答案 0 :(得分:1)

不,这样做是不可能的。看看你是否可以通过其他方式重新排列内容,例如通过可变引用而不是self来获取所需的特定字段。如果它是一种私人方法,那么人体工程学回归也无关紧要。