最初の方に書いたソースが全然考えてなくてしょんぼりだったので、自戒をこめて。
function times(num) { for (local i = 0; i < num; ++i) { yield i } } foreach(i in times(3)) { print(i+"\n") }
だと
0
1
2
(null : 0x00000000)
と出力されてしまうから
function times(num) { for (local i = 0; i < num-1; ++i) { yield i } return num-1 } foreach(i in times(3)) { print(i+"\n") }
と書いて
0
1
2
こう出力されるようにするべきだよなーと。
複数の generator を回すときはこんなんで
local g1 = times(100) local g2 = times(200) for(;;) { // どちらかが dead になったら break try { resume(g1) resume(g2) } catch (e) { break } }
毎回 generator.getstatus() != "suspended" とかするより例外ひろった方が速い*1。Squirrel だと文字列比較で、C 実装は数値でみて例外投げてる分の違い?
*1:少なくとも私の環境では