如何传入空生成器参数?
我有一个方法,它采用生成器加上一些附加参数并返回一个新的生成器:
function merge(\Generator $carry, array $additional)
{
foreach ( $carry as $item ) {
yield $item;
}
foreach ( $additional as $item ) {
yield $item;
}
}
此函数的常用用例类似于:
function source()
{
for ( $i = 0; $i < 3; $i++ ) {
yield $i;
}
}
foreach ( merge(source(), [4, 5]) as $item ) {
var_dump($item);
}
但问题是,有时我需要将空源传递给该方法。理想情况下,我希望能够做这样的事情:merge
merge(\Generator::getEmpty(), [4, 5]);
这正是我在C#中所做的(有一个属性)。但我在手册中没有看到任何类型的生成器。IEnumerable<T>.Empty
empty
我已经设法通过使用这个函数来解决这个问题(现在):
function sourceEmpty()
{
if ( false ) {
yield;
}
}
这很有效。代码:
foreach ( merge(sourceEmpty(), [4, 5]) as $item ) {
var_dump($item);
}
正确输出:
int(4)
int(5)
但这显然不是一个理想的解决方案。将空生成器传递给该方法的正确方法是什么?merge