相关疑难解决方法(0)

不能一次多次使用`x`作为可变的

在以下代码(playground)中:

struct Node {
    datum: &'static str,
    edges: Vec<Node>,
}

fn add<'a>(node: &'a mut Node, data: &'static str) -> &'a Node {
    node.edges.push(Node {
        datum: data,
        edges: Vec::new(),
    });
    &node.edges[node.edges.len() - 1] // return just added one
}

fn traverse<F>(root: &Node, callback: &F)
where
    F: Fn(&'static str),
{
    callback(root.datum);
    for node in &root.edges {
        traverse(node, callback);
    }
}

fn main() {
    let mut tree = Node {
        datum: "start",
        edges: Vec::new(),
    };

    let lvl1 = add(&mut tree, "level1"); …
Run Code Online (Sandbox Code Playgroud)

rust

15
推荐指数
2
解决办法
5778
查看次数

为什么我会收到错误"不能多次借x可变"?

我在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 …
Run Code Online (Sandbox Code Playgroud)

lifetime rust

1
推荐指数
1
解决办法
285
查看次数

标签 统计

rust ×2

lifetime ×1