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()
并不是最好的选择,这是该问题/答案中没有处理的一个非常相关的部分。