Rust具有耗尽整个序列的功能,
如果确实需要耗尽整个序列,请使用整个范围
..
作为参数。 -编程Rust
为什么您需要耗尽整个序列? I can see this documented,但我看不到任何用例,
let mut drain = vec.drain(..);
如果流失并没有取得所有权而是清除了原始结构,那么不取得所有权有什么意义呢?我认为可变参考的重点是因为“”书是借来的“,您可以将其还给我。如果清除了原始结构,为什么不<这本书?您为什么只想借东西并销毁它?想要borrow a subset of a vector, and clearing that subset很有道理-但我似乎无法全力以赴想要[[借款清除原始结构的全部内容。
drain
的RangeBounds
方法,然后需要考虑禁止无限制RangeBounds
的利弊。Pros
[如果您不允许无限制范围,则尽管使用了drain(..)
和into_iter()
,但要注意这两个并不完全相同,所以不会造成太大的混淆。
您实际上必须尽力禁止无限范围。
理想情况下,您希望使用无限制范围来引起编译错误。我是Rust的新手,所以我不确定,但是据我所知,没有办法表示drain
应该采用可实现特征RangeBounds
的泛型,只要它不是RangeFull
。
如果无法在编译时检查它,那么在运行时您想要什么行为?恐慌似乎是唯一的选择。
如评论和建议的副本中所述,在完全耗尽其后,Vec
的长度为0,但容量与调用drain
之前的容量相同。通过使用drain
允许无限制范围,您可以在某些情况下更轻松地避免重复进行内存分配。