【问题标题】:Yield not returning value收益不返回值
【发布时间】:2016-10-04 10:42:40
【问题描述】:

我正在尝试修改此代码:

function pc_permute($items, $perms = array( )) {
    if (empty($items)) {
        echo implode($perms); // yield (implode($perms));
    }  else {
        for ($i = count($items) - 1; $i >= 0; --$i) {
             $newitems = $items;
             $newperms = $perms;
             list($foo) = array_splice($newitems, $i, 1);
             array_unshift($newperms, $foo);
             pc_permute($newitems, $newperms);
         }
    }
}

如您所见,在同一行中进行了注释。但这样做不会返回任何值。

我是这样称呼它的:

  foreach (pc_permute($a) as $y) {
        echo $y;
  }

$a 应该类似于$a = [0,1,2];

使用 echo 有效,而使用 yield 无效。我做错了什么?

【问题讨论】:

  • 所以我屈服于一个递归函数,它什么都不返回。我将如何将其升级为祖父母的职能? ` 产量 pc_permute($newitems, $newperms);产量(内爆($ perms)); ` 类似的东西会无限返回生成器对象
  • 我在另一部分做了类似的事情:array_push($this->permutations, $perms);而不是产量,但我想要一个更好的方法,比如直接检索产量
  • python有yield from,没有类似的就写个循环。
  • 来自 pc_permute($newitems, $newperms);是吗!非常感谢。你会回答吗?

标签: php yield


【解决方案1】:

您的递归调用会忽略产生的值。

从 PHP 7 开始,您可以使用 generator delegation (yield from):

yield from pc_permute($newitems, $newperms);

对于旧版本,只需编写一个产生每个结果的循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2018-11-25
    • 2020-10-05
    • 2014-08-29
    • 2020-04-21
    • 2019-05-16
    • 2019-08-06
    相关资源
    最近更新 更多