wmde / traversable-iterator
将可遍历对象转换为迭代器。原生IteratorIterator的修复版本
1.0.0
2017-06-17 16:55 UTC
Requires
- php: >=7.0
Requires (Dev)
- mediawiki/mediawiki-codesniffer: ~0.8.0
- ockcyp/covers-validator: ~0.6
- phpunit/phpunit: ~6.2
- squizlabs/php_codesniffer: ~2.9
This package is not auto-updated.
Last update: 2024-09-15 04:37:28 UTC
README
Iterator
可由 Traversable
对象构建。
可以看作是 IteratorIterator
的修复版本(内部使用)。当从 IteratorAggregate
构建时,IteratorIterator
的行为可能会出乎意料:它只调用一次 getIterator
,而不是每次迭代都调用一次,这是直接遍历 IteratorAggregate
时发生的情况。换句话说:遍历包含 IteratorAggregate
的 IteratorIterator
的行为与遍历 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)
- 首次发布