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