Generics 可变借用从循环的上一次迭代开始

Generics 可变借用从循环的上一次迭代开始,generics,vector,rust,lifetime,borrow-checker,Generics,Vector,Rust,Lifetime,Borrow Checker,这里的新手,我在StackOverflow中寻找过类似的案例(有很多),但它们都有稍微不同的场景,我想不出解决这个问题的方法 我试图循环一些字符串,将它们传递给一个函数,该函数对它们应用一些操作,并最终将结果推送到一个向量中。(实际情况对于map场景来说太复杂了) mod life\u测试{ fn(U线){ //…使用项来计算结果 目标推送(“结果”); } fn parse_文件(){ 让mut目标为:Vec=Vec::new(); let source:Vec=Vec::new(); //

这里的新手,我在StackOverflow中寻找过类似的案例(有很多),但它们都有稍微不同的场景,我想不出解决这个问题的方法

我试图循环一些字符串,将它们传递给一个函数,该函数对它们应用一些操作,并最终将结果推送到一个向量中。(实际情况对于
map
场景来说太复杂了)

mod life\u测试{
fn(U线){
//…使用项来计算结果
目标推送(“结果”);
}
fn parse_文件(){
让mut目标为:Vec=Vec::new();
let source:Vec=Vec::new();
//…使用文件中的字符串填充源
对于源中的项{
分析行(项目和多目标);
}
}
}
fn main(){}
以上内容没有编译:
mutable借用在循环的上一次迭代中开始,在
parse\u行
call处

我想我理解它为什么抱怨多个可变借词,但是我找不到传递字符串和向量的方法,并且让
parse_line
函数将其结果存储到传递的向量中

在实际情况中,
parse_行
函数很复杂,它可能会也可能不会向两个向量添加值,因此我认为让
parse_行
返回多个值会使理解更复杂。因此,我宁愿传递向量(2)并让
parse_line
决定是否需要向其添加新值。

更改:

fn解析(行)
致:


fn解析_行(项目:&'a str,目标:&mut VEC操场链接中的代码似乎与您的问题完全不相关。您是否使用了正确的链接?如果没有,请更新它?编辑了操场的链接。我还发现,如果我使用
字符串而不是
&str
,它不会抱怨。因此我真的不明白如何使用
字符串是有效的。我会重读这本书的相关部分。好的,非常感谢。这是有意义的。所以,如果我可以用我自己的话来说,上一个错误是因为我强制
item
&mut target
具有相同的生存期,但这是错误的,因为
item
只存在于循环中,而
&mut target>也在循环之外?为什么它会抱怨
不能借用
target`作为一次多次可变的对象呢?还有一些我不明白的地方。@user103716是的,我相信这是正确的。如果没有看到完整的代码,我不能肯定,但简而言之:你是在强迫编译器找出一些生命周期
'一个既适用于
&mut target
又适用于
,但这是一个不必要的繁重要求,因为这些变量的生存期实际上不必相同。@user103716您告诉rustc将借用
target
的全部内容。因为必须生存的容器,这意味着寿命<代码> '<代码>超过容器的生命,因此RUSTC推断了你的需求的唯一可能的解决方案:考虑<代码>目标<代码>可借的,直到它被丢弃。这意味着从第一次迭代中的借用将与每个后续的借用重叠,并且自从MUT以来。有能力的借款是排他性的,这是不可接受的。