2 个稳定版本
使用旧的 Rust 2015
1.0.1 | 2019年10月11日 |
---|---|
1.0.0 | 2018年8月27日 |
936 在 算法 中排名
每月 438 次下载
用于 12 个crate (3 个直接使用)
15KB
222 行
vec-drain-where
一个替代的 Vec::drain_filter
实现,与标准库的实现略有不同。
此crate提供了一个扩展特质,添加了一个 e_drain_where
方法(使用 e_
前缀是为了防止与std冲突,因为目前 drain_filter
可能会被稳定为 drain_where
)。
e_drain_where
与drain filter的一个主要区别是,它不会在释放时运行到完成,因此可以从外部通过停止迭代和丢弃迭代器来“提前停止”。
例如,Vec::drain_filter
在释放时运行到完成的原因可能是它可能会相当混乱。例如,以下代码
vec.drain_filter(|x|x.should_be_removed()).any(|x|x.had_fatal_error())
并不一定执行预期的操作,即它会清除直到找到任何具有 had_fatal_error() == true 的已清除值,然后停止清除(使用
e_drain_where
)。
但在释放时运行到完成也是棘手/危险的,例如,它可能导致在释放时恐慌,从而导致双重恐慌,而 Vec::drain_filter
在稳定之前的行为可能仍然会改变,因此此crate完全避免了这个问题,但代价是使提前停止清除变得容易。
文档
文档可以在 docs.rs 上查看。(至少在发布之后;=))
许可证
根据您的选择,许可协议为以下之一
- Apache 许可证 2.0 版本,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交给包括在作品中的任何有意贡献,根据 Apache-2.0 许可证定义,将按照上述方式双许可,不附加任何额外条款或条件。