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