Mais conteúdo relacionado Semelhante a Scalaの限定継続の応用と基本 (20) Mais de Kota Mizushima (20) Scalaの限定継続の応用と基本12. void foo() {
Continuation<Void> c =`return`;
bar(c);
println("foo end");
}
void bar(Continuation<Void> c) {
for(int i = 0; i <= 10; i ++ ) {
if(i >= 5) {
println("break!");
c.invoke(null);
}
}
}
foo() "break!"
14. void foo() {
Continuation<Void> c =`return`;
bar(c);
println("foo end");
}
void bar(Continuation<Void> c) {
for(int i = 0; i <= 10; i ++ ) {
if(i >= 5) {
println("break!");
c.invoke(null);
}
}
}
foo() "break!"
18. static Continuation<Integer> continuation;
void main(String[] args) {
Integer result = hoge();
println("result = " + result);
continuation.invoke(200);
}
Integer hoge() {
println("hoge started");
foo(`return`);
println("hoge finished");
}
Integer foo(Continuation<Integer> escape) {
continuation = escape;
continuation.invoke(300);return -1;
}
23. static Continuation<Integer> continuation;
void main(String[] args) {
Integer result = hoge();
println("result = " + result);
continuation.invoke(200);
}
Integer hoge() {
println("hoge started");
foo(`return`);
println("hoge finished");
}
Integer foo(Continuation<Integer> escape) {
continuation = escape;
continuation.invoke(300); return -1;
}
40. val x1: Iterator[Int] = make[Int]{yields =>
yields(1)
println("X")
yields(2)
println("Y")
yields(3)
}
while(x1.hasNext) {
println("----")
println(x1.next)
}
48. block {
val x = amb(1, 2, 3)
val y = amb(4, 5)
printf("(%d, %d)%n", x, y)
}
52. reset {
var sum = 0; var i = 0
val LOOP = label // gotoのためのラベルを作成
sum += i
i += 1
if(i <= 100) goto(LOOP) // gotoでジャンプ
println("1から100までの合計値:" + sum)
}
64. val answer = reset {
val x = shift { k: (Int => Int) =>
println("A")
println("k(10) = " + k(10))
println("B")
8
}
println("x = " + x);x * 2
}
println("answer = " + answer)
69. val x = shift { k: (Int => Int) =>
println("A")
println("k(10) = " + k(10))
println("B")
8
}