Rust 无法在闭包内移出借用的内容

Rust 无法在闭包内移出借用的内容,rust,borrow-checker,Rust,Borrow Checker,我是铁锈新手。我试图编写一个函数,它使用传递的向量,修改它,将它附加到另一个向量并返回它 这是我的密码: fn try(other: Vec<(String, String)>) -> Vec<(String, String)> { let mut res = Vec::new(); let mut neg: Vec<(String,String)> = other

我是铁锈新手。我试图编写一个函数,它使用传递的向量,修改它,将它附加到另一个向量并返回它

这是我的密码:

fn try(other: Vec<(String, String)>) -> Vec<(String, String)> {
    let mut res = Vec::new();
    let mut neg: Vec<(String,String)> = other
                                        .iter()
                                        .map(|t| (t.0, String::from("abc")))
                                        .collect();
    res.append(&mut neg);
    res
}
fn try(其他:Vec)->Vec{
让mut res=Vec::new();
设mut neg:Vec=other
.国际热核实验堆(iter)
.map(| t |(t.0,字符串::from(“abc”))
.收集();
res.append(&mut neg);
物件
}
但是,我在
t.0
上得到了一个
无法移出借用内容的问题。我做错了什么?什么传递到闭包中?

t.0
尝试将
字符串
t
引用的元组中移出,但
t
仅借用它。这是因为
.iter()
提供了一个迭代器,该迭代器提供了对值的引用。如果你使用
进入iter()
而不是
进入iter()
你就可以使用
其他
的所有值,而不仅仅是借用它们,因为
其他。进入iter()
消耗
其他

在您的具体示例中,完全重复使用
other
将比使用
other
中的内容(部分)创建一个新的
Vec
,然后删除
other
更有效:

fn try2(mut-other:Vec)->Vec{
对于x in和mut其他{
x、 1=字符串::来自(“abc”);
}
其他
}

重复使用
字符串
s,而不是使用
字符串::from
.iter()
创建新的字符串,可能会更有效。iter()将迭代器返回向量中每个元素的引用。你似乎想把
放进iter()
res
有什么意义?为什么不直接返回
neg
。只有在您已经知道应该在此处使用
进入iter
时,您才会问您链接的问题。不过,这个问题的答案非常相关。(此外,这里最好的解决方案实际上是根本不在iter中使用
,而只是修改原始向量并返回它。)@M-ou-se选择重复目标时,答案才是真正重要的。重复的问题并不意味着目标问题完全相同,但其答案也解决了该问题。至于这是否是一个好的重复目标,我将把决定权留给剩下的选民。非常感谢。我同意这些评论。这是一个知道into_iter将在这种情况下使用的问题。你的答案与建议的副本有什么不同?@hellow这个问题只处理第一部分。在这种情况下,将
放入iter()
collect()
并不是最好的选择,这是该问题/答案中没有处理的一个非常相关的部分。