Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “来自$generator的收益率”和“返回$generator”之间的差异?_Php_Return_Generator_Yield From - Fatal编程技术网

Php “来自$generator的收益率”和“返回$generator”之间的差异?

Php “来自$generator的收益率”和“返回$generator”之间的差异?,php,return,generator,yield-from,Php,Return,Generator,Yield From,我有一个函数,返回一个生成器。目前,它使用了来自的收益率: function foo() { $generator = getGenerator(); // some other stuff (no yields!) yield from $generator; } 如果我用一个简单的返回值替换从得到的收益,在这种情况下会有什么变化吗?也许在行刑的时候?还是表演?yield from是否生成新的“外部”迭代器 我知道,在其他情况下,yield from可以更灵活,因为我

我有一个函数,返回一个生成器。目前,它使用了来自的收益率:

function foo()
{
    $generator = getGenerator();
    // some other stuff (no yields!)
    yield from $generator;
}
如果我用一个简单的
返回值
替换从得到的
收益,在这种情况下会有什么变化吗?也许在行刑的时候?还是表演?
yield from
是否生成新的“外部”迭代器


我知道,在其他情况下,
yield from
可以更灵活,因为我可以多次使用它,甚至可以将它与简单的
yield
s混合使用,但这对我的情况并不重要。

当你像上面那样在方法末尾使用
yield from
一次时,这不会改变方法返回的内容。但是方法内部的代码仍然存在差异:在迭代开始时回放迭代器时,调用
yield from
之前的任何代码,而在调用函数时执行
return
之前的代码,因为此函数现在只是一个普通函数(实际上,这并不特定于来自
的收益率。这是收益率的行为。有关证明,请参阅)


yield from
的最大优点是,您可以在函数中多次使用它,它将所有迭代器的值组合成一个迭代器。

在您的例子中,将
yield from
更改为
return
会得到相同的结果。但是,如果在
return
之前有
yield
语句,它就赢了't组合来自
getGenerator()
的值

输出:

testing gen_2
1
testing gen_3
2
testing gen_4
2
1
请阅读与使用
yield from
后跟
迭代器\u to_array()
testing gen_2
1
testing gen_3
2
testing gen_4
2
1