【发布时间】: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);是吗!非常感谢。你会回答吗?