gpt4 book ai didi

rust - 为什么我会收到错误 "cannot borrow x as mutable more than once"?

转载 作者:行者123 更新时间:2023-11-29 08:10:40 27 4
gpt4 key购买 nike

我正在用 Rust 实现一个解析器。我必须更新前瞻的索引,但是当我在 self.current() 之后调用 self.get() 时,我得到一个错误:

cannot borrow *self as mutable more than once at a time

因为我是 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();
}

最佳答案

Point::get 函数改变了调用它的 Point。函数 Point::current 返回对调用它的 Point 的一部分的引用。所以,当你写

while let Some(token) = self.current() {
println!("{:?}", token);
let _ = self.get();
}

token 是对存储在 self 中的内容的引用。因为改变 self 可能会更改或删除任何 token 指向的内容,所以编译器会阻止您在变量 时调用 self.get() token 在范围内。

关于rust - 为什么我会收到错误 "cannot borrow x as mutable more than once"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33133329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com