如何在Rust的内部循环中正确移动所有权?

如何在Rust的内部循环中正确移动所有权?,rust,ownership,Rust,Ownership,问题1: 如何在内部循环中正确移动数据的所有权,以便在完成最终迭代后,迭代的容器将Drop()ed 例如: let left_strs: Vec<String> = Self::allowed(&slice[..i]); let right_strs: Vec<String> = Self::allowed(&slice[i..]); for left_str in left_strs{ // how to properly move the ow

问题1: 如何在内部循环中正确移动数据的所有权,以便在完成最终迭代后,迭代的容器将
Drop()
ed

例如:

let left_strs: Vec<String> = Self::allowed(&slice[..i]);
let right_strs: Vec<String> = Self::allowed(&slice[i..]);
for left_str in left_strs{
    // how to properly move the ownership of the data here?
    for right_str in right_strs.iter(){
        ans.push(format!("({}, {})", left_str, right_str));
    }
}
let left_strs:Vec=Self::allowed(&slice[…i]);
let right_strs:Vec=Self::allowed(&slice[i..]);
对于左箭头中的左箭头{
//如何在此处正确移动数据的所有权?
对于右螺纹中的右螺纹,iter(){
ans.push(格式!(“({},{})”,left_str,right_str));
}
}
问题2:
对于向量中的所有数据,其所有权已被移动,并且它已被
Drop()
ed最终,向量(容器)是否会因此自动
Drop()
ed?

我想到的最简单的事情是使用一个新的作用域:

fn main(){
让我们向左看:Vec=Vec![“一”。to_string(),“二”。to_string();
{
让我们右转:Vec=Vec![“一”。对字符串(),“二”。对字符串();
//使用左箭头上的(&N)以避免移动
对于左箭头和左箭头{
对于右螺纹中的右螺纹,iter(){
println!(“({},{})”,左,右;
}
}
//对![3]是下降
}
//我们仍然可以使用left_strs,因为我们以前使用了&before
对于左上角的s{
println!(“{}”,s);
}
}
这样,当作用域结束时,
right\u strs
将被删除


如果没有一个简单的工作示例来说明您的问题,那么很难回答您的问题。为什么需要在该点放下容器?您当前遇到了哪些错误?为什么移动是解决方案?嗯,您不能…这没有任何意义,如果您将所有权移动到内部循环
右侧,则在第一次迭代后,strs
将被删除。无论如何,没有特别的理由移动所有权,
格式!()
不使用它生成新字符串的参数。感谢上面的所有回复,我从中了解到了这些。@Emoun,谢谢你的回复。我是一个新手,现在正在疯狂地探索各种可能性:)。这一点很正确!