Я думаю, что вы подходите к этому вопросу с неправильной стороны.
Приняв решение о том, что вы хотели бы иметь метод drain
, который принимает RangeBounds
, вам необходимо рассмотреть плюсы. и минусы запрета неограниченного RangeBounds
.
Плюсы
- Если вы запретите неограниченный диапазон, будет меньше путаницы относительно того, использовать ли
drain(..)
против into_iter()
, хотя и отмечая, что эти два не совсем идентичны.
Минусы
Вам действительно придется идтине позволяйте запретить неограниченный диапазон.
В идеале вы хотели бы использовать неограниченный диапазон, чтобы вызвать ошибку компиляции. Я новичок в Rust, поэтому я не уверен в этом, но, насколько я знаю, нет никакого способа выразить, что drain
должен использовать универсальный, который реализует черту RangeBounds
, пока это не RangeFull
.
Если это не удалось проверить во время компиляции, какое поведение вы бы хотели во время выполнения? Казалось бы, паника - единственный вариант.
Как отмечается в комментариях и в предложенном дубликате, после полного опустошения, Vec
будет иметь длину 0, ноемкость такая же, как и до вызова drain
. Допуская неограниченный диапазон с drain
, вы облегчаете избежать повторного выделения памяти в некоторых случаях использования.
По крайней мере, для меня минусы перевешивают плюсы.