4
通常我不会对语言结构感到困惑,但我无法对这里发生的事情做出正面或反面的评论。发生器::发送工作如何?
<?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
所以我的循环的每2迭代被跳过,我得到NULL
为$ans
周期性。什么??
我想$ans
会收到$gen->send
的结果,如果我没有在未来yield
之前发送任何东西,然后$ans
将是空的,但我总是送些什么东西在每次迭代,那么什么是怎么回事?
尝试颠倒顺序。我认为(不知道),你需要发送它之前,它可以用在生成器中的回声。 – apokryfos
@apokryfos颠倒现在的顺序?在定义之前,我无法打印'$ ans'。也许'foreach'正在搞乱它...... – mpen
我在说'$ gen-> send($ x); echo“loop $ x \ n”;'并比较差异而不是当前的echo - > send'组合 – apokryfos