【发布时间】:2021-05-15 15:32:40
【问题描述】:
Rust 新手,我在 StackOverflow 中寻找过类似的案例(并且有很多),但它们的场景都略有不同,我无法找到解决此问题的方法。
我正在尝试遍历一些字符串,将它们传递给对它们应用一些操作的函数,并最终将结果推送到向量中。 (实际情况对于map 场景来说太复杂了)。
mod lifetime_test {
fn parse_line<'a>(item: &'a str, target: &'a mut Vec<&'a str>) {
// ... use item to compute a result
target.push("result");
}
fn parse_file() {
let mut target: Vec<&str> = Vec::new();
let source: Vec<&str> = Vec::new();
// ... fill source with strings from file
for item in source {
parse_line(item, &mut target);
}
}
}
fn main() {}
以上内容无法编译:mutable borrow starts here in previous iteration of loop parse_line 调用。
我想我理解为什么它抱怨多个可变借用,但我找不到传递字符串和向量的方法,并让 parse_line 函数将其结果存储到传递的向量中。
在实际情况下,parse_line 函数很复杂,它可能会也可能不会向几个向量添加值,所以我认为让parse_line 返回多个值会使理解起来更复杂。所以我宁愿传递 vector(2) 并让parse_line 决定它是否需要向它添加新值。
【问题讨论】:
-
游乐场链接中的代码似乎与您的问题完全无关。您是否使用了正确的链接?如果不能,请更新一下吗?
-
编辑了指向操场的链接。我还发现,如果我使用
String而不是&str它不会抱怨。所以我真的不明白这是如何工作的。我会重新阅读本书的相关部分。
标签: generics vector rust lifetime borrow-checker