Shortening function calls with closures
The Rust compiler will probably inline the code, and generate the exact same code in both situations. So there isn't a performance issue.

However, I think there is a better way to write it:

if let Some((x,y)) = match key.code {
   KeyCode::Left =&gt; Some((-1, 0)),
   KeyCode::Right =&gt; Some((1, 0)),
   KeyCode::Up =&gt; Some((0, -1)),
   KeyCode::Down =&gt; Some((0, 1)),
   _ =&gt; None
} {
   self.map.move_object_by(PLAYER, x, y);
}