我正在尝试将用C语言编写的程序重写为Rust,以尝试解决这个问题。这是我正在处理的结构:
struct Parser<'l> {
lexer: Lexer<'l>,
current: Token,
error: ErrorType,
error_messages: Vec<String>,
}
这是有问题的代码:
fn eat(&mut self, ttype: TokenType) -> Option<Token> {
let eaten: Token;
if self.current.ttype == ttype {
eaten = self.current;
self.current = self.lexer.next_token();
// ...
}
Some(eaten)
}
我希望能够保存self.current
的内容,然后在下一行进行更改:
eaten = self.current;
self.current = self.lexer.next_token();
但是我得到了错误
error[E0507]: cannot move out of borrowed content
--> src\parser.rs:37:21
|
37 | eaten = self.current;
| ^^^^^^^^^^^^ cannot move out of borrowed content
我想我理解为什么会发生错误,但是我不知道如何解决该错误。