我有一个返回生成器的函数。目前它使用yield from
:
function foo()
{
$generator = getGenerator();
// some other stuff (no yields!)
yield from $generator;
}
如果我用简单的return
替换yield from
,在这种情况下会改变什么吗?也许在执行中?还是性能? yield from
是否会生成一个新的“外部”迭代器?
我知道,在其他情况下,yield from
可以更灵活,因为我可以多次使用它,甚至可以将它与简单的 yield
混合,但这并不对我来说很重要。
最佳答案
当您像上面那样在方法末尾使用 yield from
时,这不会改变该方法返回的内容。但方法内部的代码仍然存在差异:在迭代开始时回滚迭代器时会调用 yield from
之前的任何代码,而 return
之前的代码会被调用。 code> 在调用该函数时执行,因为该函数现在只是一个普通函数(实际上,这不是 yield from
特有的。它是 yield
的行为。证明见 https://3v4l.org/jnPvC)。
yield from
的一大优点是您可以在函数中多次使用它,它将所有迭代器的值组合到一个迭代器中。
关于php - `yield from $generator` 和 `return $generator` 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37188263/