|
|||
class Continuation |
|
Continuation
-Objekte werden von Kernel#callcc
generiert. Sie beinhalten eine return-Addresse sowie einen Ausführungs-Kontext, der eine nicht-lokale
Rückkehr an das Ende des callcc
-Blocks von jeder Programmstelle aus ermöglicht.
Continuations sind etwa analog zu einer strukturierten Version von C's setjmp/longjmp
(obwohl sie mehr Zustandsinformationen enthalten, so dass sie sehr ähnlich zu Threads sind).
Zum Beispiel:
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 |
instance methods | ||
call | cont.call( [args]* ) |
Diese Methode ruft das Continuation-Objekt auf. Das Programm nimmt die Ausführung am Ende des
callcc -Blocks wieder auf. Wenn keine Argumente übergeben werden,
gibt das ursprüngliche callcc nil zurück. Wenn ein Argument
angegeben ist, gibt callcc dieses zurück. In anderen Fällen wird ein Array, das
args enthält, zurück gegeben.
|