wmde/traversable-iterator

将可遍历对象转换为迭代器。原生IteratorIterator的修复版本

1.0.0 2017-06-17 16:55 UTC

This package is not auto-updated.

Last update: 2024-09-15 04:37:28 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Download count

Iterator 可由 Traversable 对象构建。

可以看作是 IteratorIterator 的修复版本(内部使用)。当从 IteratorAggregate 构建时,IteratorIterator 的行为可能会出乎意料:它只调用一次 getIterator,而不是每次迭代都调用一次,这是直接遍历 IteratorAggregate 时发生的情况。换句话说:遍历包含 IteratorAggregateIteratorIterator 的行为与遍历 IteratorAggregate 本身的行为不同。这是出乎意料的,可能会出现问题。例如,当 IteratorAggregate 包含一个 Generator(这种情况很常见)时,多次遍历 IteratorIterator 将会导致错误,因为 Generator 不可重置。

IteratorIterator 失败的示例

$iteratorAggregate = new class() implements \IteratorAggregate {
	public function getIterator() {
		yield 'a';
		yield 'b';
		yield 'c';
	}
}

$iterator = new IteratorIterator( $iteratorAggregate );

foreach ( $iterator as $value ) {}
foreach ( $iterator as $value ) {} // Exception: Cannot rewind a generator that was already run

此异常以及更一般的行为差异在使用 TraversableIterator 时不会发生。

安装

要将此包作为本地、项目特定的依赖项添加到您的项目中,只需在您的项目 composer.json 文件中添加对 wmde/traversable-iterator 的依赖。以下是一个 composer.json 文件的示例,它仅定义了对 Traversable Iterator 1.x 的依赖

{
    "require": {
        "wmde/traversable-iterator": "~1.0"
    }
}

使用

运行测试

对于完整的 CI 运行

composer ci

仅测试

composer test

仅样式检查

composer cs

发布说明

1.0.0 (2017-06-17)

  • 首次发布