如何在 Rust 的内部循环中正确移动所有权?
How to properly move ownership in an inner loop in Rust?
问题一:
如何在内部循环中正确移动数据的所有权,以便在完成最终迭代后,迭代的容器将被 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));
}
}
问题二:
对于向量中的所有数据,其所有权已移动,并且最终已被 Drop()
ed,向量(容器)是否会因此自动 Drop()
ed?
我想到的最简单的事情就是使用新的示波器:
fn main() {
let left_strs: Vec<String> = vec!["one".to_string(), "two".to_string()];
{
let right_strs: Vec<String> = vec!["one".to_string(), "two".to_string()];
// use a & on left_strs to avoid move
for left_str in &left_strs {
for right_str in right_strs.iter() {
println!("({}, {})", left_str, right_str);
}
}
// right_strs is drop
}
// we can still use left_strs, since we used a & before
for s in left_strs {
println!("{}", s);
}
}
这样,right_strs
将在作用域结束时被丢弃。
问题一:
如何在内部循环中正确移动数据的所有权,以便在完成最终迭代后,迭代的容器将被 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));
}
}
问题二:
对于向量中的所有数据,其所有权已移动,并且最终已被 Drop()
ed,向量(容器)是否会因此自动 Drop()
ed?
我想到的最简单的事情就是使用新的示波器:
fn main() {
let left_strs: Vec<String> = vec!["one".to_string(), "two".to_string()];
{
let right_strs: Vec<String> = vec!["one".to_string(), "two".to_string()];
// use a & on left_strs to avoid move
for left_str in &left_strs {
for right_str in right_strs.iter() {
println!("({}, {})", left_str, right_str);
}
}
// right_strs is drop
}
// we can still use left_strs, since we used a & before
for s in left_strs {
println!("{}", s);
}
}
这样,right_strs
将在作用域结束时被丢弃。