bentools / rewindable-generator
现在你的生成器可以回滚了。
1.2
2023-12-23 15:48 UTC
Requires
- php: >=8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.35
- pestphp/pest: ^2.24
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.4
- squizlabs/php_codesniffer: ^3.7
- symfony/var-dumper: @stable
This package is auto-updated.
Last update: 2024-09-23 17:17:10 UTC
README
可回滚生成器
$generator = (function () { yield 'foo'; yield 'bar'; })(); var_dump(iterator_to_array($generator)); // ['foo', 'bar'] var_dump(iterator_to_array($generator)); // Boom
PHP 致命错误:未捕获异常:无法遍历已关闭的生成器
是的,我知道。这很烦人。但是这里有一个小的类,它会利用 CachingIterator
来使你的生成器可回滚。
非常简单
use BenTools\RewindableGenerator; $generator = (function () { yield 'foo'; yield 'bar'; })(); $iterator = new RewindableGenerator($generator); var_dump(iterator_to_array($iterator)); // ['foo', 'bar'] var_dump(iterator_to_array($iterator)); // ['foo', 'bar']
警告:如果你打算回滚一个还没有到达末尾的生成器(即你 break
循环),将会抛出异常,因为 CachingIterator
不会缓存所有项目。
安装
composer require bentools/rewindable-generator
测试
./vendor/bin/phpunit