我对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);
}
}
}
}
1条答案
按热度按时间uinbv5nw1#
正如我在评论中提到的,当你真的不需要
self
时,你是通过值来获取它的(因此获得了所有权)。