函数声明中更具体的自我
More specific self in function declaration
鉴于此代码:
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
的可变引用,因为我已经在行 for ev in self.display.poll_events() {
中借用了 self.display
的不可变引用。
如果我只想修改 self
中不在 self.display
中的字段,是否可以将其指定给编译器?它会是这样的:
fn handle_keyboard(&mut self.field, ...)
不,这是不可能的。看看你是否可以用其他方式重新安排事情,比如通过可变引用而不是所有 self
来获取你需要的特定字段。如果是私有方法,那么人体工程学回归也无所谓。
鉴于此代码:
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
的可变引用,因为我已经在行 for ev in self.display.poll_events() {
中借用了 self.display
的不可变引用。
如果我只想修改 self
中不在 self.display
中的字段,是否可以将其指定给编译器?它会是这样的:
fn handle_keyboard(&mut self.field, ...)
不,这是不可能的。看看你是否可以用其他方式重新安排事情,比如通过可变引用而不是所有 self
来获取你需要的特定字段。如果是私有方法,那么人体工程学回归也无所谓。