如何在Rust中的for循环中使用self

wrrgggsh  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(153)

我对Rust很陌生,刚开始做一点“编译器”,在使用了指针系统后,我遇到了移动系统的问题:

for constraint in constraints {
    self.get_or_create_node(constraint.0.to_string(), 0, &constraint.1);
}

这个系统使用了一个递归函数,它为一个路径创建了一个树,我称之为约束,但是我用字符串来命名我的节点,这样我的结构体就不能被复制了。所以循环中的self抛出了一个移动错误,我该如何防止它呢?
下面是get_or_create_node方法:

fn get_or_create_node(mut self, node_name: String, current_level: i32, value: &String) {
    let path: Vec<&str> = node_name.split('.').collect();
    if current_level + 1 == path.len().try_into().unwrap() {
        self.value = value.to_string();
    } else {
        for node in self.nodes {
            if path.get(current_level as usize).expect("Path in if statement is false") == &node.value.as_str() {
                node.get_or_create_node(node_name.clone(), current_level + 1, value);
            }
        }
    }
}
uinbv5nw

uinbv5nw1#

正如我在评论中提到的,当你真的不需要self时,你是通过值来获取它的(因此获得了所有权)。

fn get_or_create_node(&mut self, node_name: String, current_level: i32, value: &String)

相关问题