如果函数同时包含 return 和 yield,为什么 php return 是一个空的生成器?
Why does php return an empty Generator if function contains both return and yield?
// Returns empty generator as expected.
function yieldOnly(): Generator
{
yield;
}
// Throws TypeError as expected.
function returnOnly(): Generator
{
return;
}
// Returns empty generator???
function returnAndYield(): Generator
{
return;
yield;
}
returnAndYield()
的 return 值为空 Generator
,尽管我期望它会抛出 TypeError
。这是预期的行为吗?我无法在任何地方找到它的记录,我想知道这是否是一个应该报告的潜在错误。
关于 generator syntax 的手册是这样说的:
Any function containing yield
is a generator function.
因此,通过在其中使用 yield
关键字可以生成生成器函数。使用 return
关键字,您将退出用于构建生成器函数的函数。在这种情况下,它只是空的,因为在 return
语句之前没有 yield
行。当您使用以下源代码时:
function returnAndYield(): Generator
{
yield 1;
yield 2;
return;
yield 3;
yield 4;
}
$result = returnAndYield();
echo implode(',', iterator_to_array($result));
您将得到以下输出:
1,2
值 3
和 4
不在生成器中,因为函数在这些 yield
语句之前退出。
// Returns empty generator as expected.
function yieldOnly(): Generator
{
yield;
}
// Throws TypeError as expected.
function returnOnly(): Generator
{
return;
}
// Returns empty generator???
function returnAndYield(): Generator
{
return;
yield;
}
returnAndYield()
的 return 值为空 Generator
,尽管我期望它会抛出 TypeError
。这是预期的行为吗?我无法在任何地方找到它的记录,我想知道这是否是一个应该报告的潜在错误。
关于 generator syntax 的手册是这样说的:
Any function containing
yield
is a generator function.
因此,通过在其中使用 yield
关键字可以生成生成器函数。使用 return
关键字,您将退出用于构建生成器函数的函数。在这种情况下,它只是空的,因为在 return
语句之前没有 yield
行。当您使用以下源代码时:
function returnAndYield(): Generator
{
yield 1;
yield 2;
return;
yield 3;
yield 4;
}
$result = returnAndYield();
echo implode(',', iterator_to_array($result));
您将得到以下输出:
1,2
值 3
和 4
不在生成器中,因为函数在这些 yield
语句之前退出。