継続実験

いまいち理解していない…


#!/usr/bin/env rhino

function capture() {
return new Continuation();
}

function loop(interrupt) {
var i;
var cout;

for(i = 1; i <= 10; i++) {
print("Value of i: " + i);
if(i == interrupt) {cout = capture()}
if(cout) return cout;
}
}

var cout = loop(5);

if(cout instanceof Continuation) {
print("continuation");
cout();
} else {
print("not continuation");
}

実行結果は次の通り。

Value of i: 1
Value of i: 2
Value of i: 3
Value of i: 4
Value of i: 5
continuation
Value of i: 6
Value of i: 7
Value of i: 8
Value of i: 9
Value of i: 10
not continuation
最後のブロックが2回呼ばれているのが変な感じ。
あんまりきれいなコードじゃなけど、使い方はあってんのかな。

if(i == interrupt) {return capture()}」とするとうまくいかないのは、元のコードにもどったら即returnだからか?


追記
capture()から、どうやって最上位まで戻るかが問題かな…