在Programming Rust的第327页,您可以找到以下语句
但是,与
into_iter()通过值获取集合并使用它的方法不同,该方法drain仅借用对集合的可变引用,并且在删除迭代器时,它将从集合中删除所有剩余元素,并将其保留为空。
我对它表示从集合中删除任何剩余元素感到困惑,这是什么意思?我可以看到这段代码,当删除迭代器时,其余元素a仍然存在,
fn main() {
let mut a = vec![1, 2, 3, 4, 5];
{
let b: Vec<i32> = a.drain(0..3).collect();
}
println!("Hello, world! {:?}", a);
}
Run Code Online (Sandbox Code Playgroud)
也许我只是对措辞感到困惑。还有什么呢?
这看起来有点措辞不准确。
这些单词的真正含义是:如果删除drain迭代器而不用尽它,它将删除用于其创建的所有元素。正如您已要求它仅使用前三个元素一样,它不会清空整个矢量,而只会清空第一部分。但是即使没有使用它也会这样做:
fn main() {
let mut a = vec![1, 2, 3, 4, 5];
{
let _ = a.drain(0..3);
}
println!("Hello, world! {:?}", a);
}
Run Code Online (Sandbox Code Playgroud)
Hello, world! [4, 5]
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式理解这一点:这里提到的“集合”不是drain调用的初始集合,而是由传递范围指定的“子集合”。
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |