本文主要比较了两种语言的功能特点。yield这个关键词,在两种语言都有。
先上ruby代码
# ruby带块的函数使用示例 def myloop(a, b) while true print "into Coroutine(进入协程)\n" yield a, b end end num = 1 myloop(2, 3) do |aa,bb| puts "num is #{num}" num = 2 * num + aa + bb break if num > 100 end
再上php代码
<?php // php协程使用示例。 function myloop($a, $b, $call_fun) { $fun = $call_fun($a, $b); echo "into Coroutine(进入协程)\n"; // 这里多一行。php的协程特点 while (true) { if ( $fun->valid() ) { echo "into Coroutine(进入协程)\n"; $fun->current() ; }else { break; } $fun->next(); } }; $num = 1; myloop(2, 3, function ($a, $b) use ($num) { // 这是一个匿名的协程函数 while (true) { echo "num is {$num}\n"; $num = 2 * $num + $a +$b ; if ($num > 100) break; yield ; } });
最终的结果都是
引用
into Coroutine(进入协程)
num is 1
into Coroutine(进入协程)
num is 7
into Coroutine(进入协程)
num is 19
into Coroutine(进入协程)
num is 43
into Coroutine(进入协程)
num is 91
num is 1
into Coroutine(进入协程)
num is 7
into Coroutine(进入协程)
num is 19
into Coroutine(进入协程)
num is 43
into Coroutine(进入协程)
num is 91