我在Rust中实现了一个解析器.我必须更新前瞻的索引,但是当我收到错误self.get()后调用时self.current():
cannot borrow *self as mutable more than once at a time
Run Code Online (Sandbox Code Playgroud)
这是令人困惑的,因为我是Rust的新手.
#[derive(Debug)]
pub enum Token {
Random(String),
Undefined(String),
}
struct Point {
token: Vec<Token>,
look: usize,
}
impl Point {
pub fn init(&mut self){
while let Some(token) = self.current(){
println!("{:?}", token);
let _ = self.get();
}
}
pub fn current(&mut self) -> Option<&Token> {
self.token.get(self.look)
}
pub fn get(&mut self) -> Option<&Token> {
let v = self.token.get(self.look);
self.look += 1;
v
}
}
fn main(){
let token_list = vec![Token::Undefined("test".to_string()),
Token::Random("test".to_string())];
let mut o = Point{ token: token_list, look: 0 };
o.init();
}
Run Code Online (Sandbox Code Playgroud)
该函数Point::get改变了Point它被调用的函数.该函数Point::current返回Point对其被调用的部分的引用.所以,当你写作
while let Some(token) = self.current() {
println!("{:?}", token);
let _ = self.get();
}
Run Code Online (Sandbox Code Playgroud)
token是对存储的内容的引用self.因为变异self可能会改变或删除任何token指向的点,编译器会阻止您self.get()在变量token在范围内时调用.
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |