ファイバーです。他の言語ではコルーチンやマイクロスレッドと言われたりしています。
fiber(){}式によって生成されます。
処理の途中で中断し、再開することのできる関数として用いることができます。
returnするとそのファイバーは「終了」という扱いを受けてis_aliveがtrueを返すようになり、また、resetするまでは呼び出そうとしてもundefinedを返すだけとなります。
// 基本的な使い方 { fib : fiber(){ i : 0; while (true){ ++i; yield i; } } 10.times{ fib().p; } } // fiberから呼び出した関数でもyieldできる { f : fun(){ yield "in fun f"; } fib : fiber(){ yield "fiber begin"; f(); yield "fiber end"; // returnの値は無視される return "fiber finish"; } i : 0; while (fib.is_alive){ ret : fib(); ret.p; if (fib.is_alive){ ("loop "~i.to_s~" : "~ret).p; ++i; } } }
(constructor) | インスタンス生成 |
reset | 初期状態に戻す |
halt | 強制終了させる |
is_alive | まだ終了していないかどうか |