#iterator #macro

ad-hoc-iter

自定义精确大小所有者迭代器宏和其他可选工具

6 个版本

0.2.3 2020 年 12 月 30 日
0.2.2 2020 年 11 月 10 日
0.1.1 2020 年 11 月 9 日

Rust 模式 中排名第 1247

MIT 许可证

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

无运行时依赖

功能