通常我不会对语言结构感到困惑,但我无法理解这里正在发生什么。
我的循环每两次迭代会跳过一次,有时会周期性地得到
<?php
function action() {
for($i=0; $i<10; ++$i) {
$ans = (yield expensive($i));
echo "action $ans\n";
}
}
function expensive($i) {
return $i*2;
}
$gen = action();
foreach($gen as $x) {
echo "loop $x\n";
$gen->send($x);
}
输出:
loop 0
action 0
action
loop 4
action 4
action
loop 8
action 8
action
loop 12
action 12
action
loop 16
action 16
action
我的循环每两次迭代会跳过一次,有时会周期性地得到
NULL
的$ans
。怎么回事?我以为$ans
会收到$gen->send
的结果,如果在下一个yield
之前没有发送任何东西,那么$ans
就是空的,但我每次迭代都发送了一些东西,所以这里到底发生了什么?
$ans
之前我无法打印它。也许是foreach
引起的问题... - mpen$gen->send($x); echo "loop $x\n";
,并将其与当前的echo -> send
组合进行比较。 - apokryfos