Generics 可变借用从循环的上一次迭代开始
这里的新手,我在StackOverflow中寻找过类似的案例(有很多),但它们都有稍微不同的场景,我想不出解决这个问题的方法 我试图循环一些字符串,将它们传递给一个函数,该函数对它们应用一些操作,并最终将结果推送到一个向量中。(实际情况对于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(); //
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以来。有能力的借款是排他性的,这是不可接受的。