【发布时间】:2020-02-04 08:33:28
【问题描述】:
在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);
}
也许我只是对措辞感到困惑。还有其他的吗?
【问题讨论】:
-
没有一个单一的
drain方法,而是针对多种集合使用单独的方法,例如Vec<T>、HashMap<K, V>和String。 Programming Rust 是说它在谈论哪一个,还是模棱两可?HashSet::drain完全按照文字所说的那样做。