是使用rain(..)保留原始结构的内存分配的唯一原因吗?

问题描述 投票:2回答:1

Rust具有耗尽整个序列的功能,

如果确实需要耗尽整个序列,请使用整个范围..作为参数。 -编程Rust

为什么您需要耗尽整个序列? I can see this documented,但我看不到任何用例,

let mut drain = vec.drain(..);

如果流失并没有取得所有权而是清除了原始结构,那么不取得所有权有什么意义呢?我认为可变参考的重点是因为“”书是借来的“,您可以将其还给我。如果清除了原始结构,为什么不<这本书?您为什么只想借东西并销毁它?想要borrow a subset of a vector, and clearing that subset很有道理-但我似乎无法全力以赴想要[[借款清除原始结构的全部内容。

rust iterator
1个回答
0
投票
已经决定要使用drainRangeBounds方法,然后需要考虑禁止无限制RangeBounds的利弊。

Pros

[如果您不允许无限制范围,则尽管使用了drain(..)into_iter(),但要注意这两个并不完全相同,所以不会造成太大的混淆。

  • 缺点

    您实际上必须尽力禁止无限范围。

  • 理想情况下,您希望使用无限制范围来引起编译错误。我是Rust的新手,所以我不确定,但是据我所知,没有办法表示drain应该采用可实现特征RangeBounds的泛型,只要它不是RangeFull

  • 如果无法在编译时检查它,那么在运行时您想要什么行为?恐慌似乎是唯一的选择。

  • 如评论和建议的副本中所述,在完全耗尽其后,Vec的长度为0,但容量与调用drain之前的容量相同。通过使用drain允许无限制范围,您可以在某些情况下更轻松地避免重复进行内存分配。

  • 至少对我来说,弊大于利。
  • © www.soinside.com 2019 - 2024. All rights reserved.