php - `yield from $generator` 和 `return $generator` 之间的区别?

标签 php return generator yield-from

我有一个返回生成器的函数。目前它使用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/

相关文章:

python - 从集合中获取一个或无

php - application/json 所有请求都转到 403

php - PayPal IPN - PHP 和 MySQL

php - 具有三个参数的开关盒?

arrays - 电子表格函数中的返回数组

python监控一个日志文件非阻塞

php - 如何从今天、上周或上个月插入的 MySQL 数据库中选择所有 Eloquent 模型?

java - 为什么我的批处理文件输入代码不起作用?

Android:从服务获取结果

python - 有没有办法在 python 中压缩列表/元组的内部元素?