6 个版本
0.2.3 | 2020 年 12 月 30 日 |
---|---|
0.2.2 | 2020 年 11 月 10 日 |
0.1.1 | 2020 年 11 月 9 日 |
在 Rust 模式 中排名第 1247
15KB
335 行
自定义所有者迭代器类型
此软件包定义了宏 iter!
,该宏生成自定义迭代器类型,这些类型拥有自己的值并且具有编译时已知的精确大小。
用法
此宏可以像 vec!
一样使用,但它产生一个不分配的 impl Iterator
,该迭代器直接产生值,而不是值的引用。
当您需要一个非拷贝类型的自定义迭代器时,这可能很有用,因为当前有大小切片和数组没有以移动其值的方式实现 IntoIterator
,而是产生引用,导致需要复制。
iter!
宏的迭代器类型在调用 next()
时移动它们的值而不是返回引用,并在迭代器本身被丢弃时丢弃未消耗的值。
示例
不复制地连接 String
的 '切片'。
let whole: String = iter![String::from("Hell"),
String::from("o "),
String::from("world"),
String::from("!")]
.collect();
assert_eq!("Hello world!", &whole[..]);
函数
迭代器类型也有一些相关函数。
整个迭代器的长度
pub const fn len(&self) -> usize
尚未消耗的迭代器剩余部分
pub fn rest(&self) -> &[T]
整个数组
所有未消耗的值都进行了初始化,已消耗的值未初始化。
pub fn array(&self) -> &[MaybeUninit<T>; Self::LEN]
自上次消耗以来消耗了多少项。
pub const fn consumed(&self) -> usize
许可证
MIT