|
|||
Forrige < |
Innhold ^
|
Neste >
|
klassen Continuation |
|
Continuation
objects are generated by
Kernel#callcc
. They hold a return address and execution
context, allowing a nonlocal return to the end of the callcc
block from anywhere within a program. Continuations are somewhat
analogous to a structured version of C's setjmp/longjmp
(although they contain more state, so you might consider them closer
to threads).
For instance:
arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ] callcc{|$cc|} puts(message = arr.shift) $cc.call unless message =~ /Max/ |
Freddie Herbie Ron Max |
callcc {|cont| for i in 0..4 print "\n#{i}: " for j in i*5...(i+1)*5 cont.call() if j == 17 printf "%3d", j end end } print "\n" |
0: 0 1 2 3 4 1: 5 6 7 8 9 2: 10 11 12 13 14 3: 15 16 |
instansmetoder | ||
call | cont.call( [ args ]* ) |
Invokes the continuation. The program continues from the end of
the callcc block. If no arguments are given, the original
callcc returns nil . If one argument is given,
callcc returns it. Otherwise, an array containing
args is returned.
|
Forrige < |
Innhold ^
|
Neste >
|