flo*_*ori 12 php return generator yield-from
我有一个功能,返回一个发电机.目前它使用yield from:
function foo()
{
$generator = getGenerator();
// some other stuff (no yields!)
yield from $generator;
}
Run Code Online (Sandbox Code Playgroud)
如果我yield from用一个简单的替换它,return在这种情况下,这会改变什么吗?也许在执行中?还是表现?会yield from产生一个新的"外部"迭代器吗?
我知道,在其他情况下yield from可以更灵活,因为我可以使用它几次甚至将它与简单的yields 混合,但这对我的情况无关紧要.
小智 5
在您的情况下,更改yield from为return会产生相同的结果。但是,如果您yield之前有语句return,它不会合并 中的值getGenerator()。
function gen_1()
{
yield 1;
}
function gen_2()
{
return gen_1();
}
function gen_3()
{
yield 2;
return gen_1();
}
function gen_4()
{
yield 2;
yield from gen_1();
}
echo "testing gen_2\n";
foreach (gen_2() as $v) {
echo $v . "\n";
}
echo "testing gen_3\n";
foreach (gen_3() as $v) {
echo $v . "\n";
}
echo "testing gen_4\n";
foreach (gen_4() as $v) {
echo $v . "\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
testing gen_2
1
testing gen_3
2
testing gen_4
2
1
Run Code Online (Sandbox Code Playgroud)
yield from当您像上面那样在方法末尾使用一次时,这不会改变方法返回的内容。但方法内部的代码还是有区别的:在yield from迭代开始时回滚迭代器时会调用 the 之前的任何代码,而在return调用函数时会执行 the 之前的代码,因为该函数只是一个普通函数现在(实际上,这并不特定于yield from。这是 的行为。有关证明yield,请参阅https://3v4l.org/jnPvC )。
最大的优点yield from是您可以在函数中多次使用它,它将所有迭代器的值组合到一个迭代器中。
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |