Continuation

Continuation

ri

 ---------------------------------------------------- Class: 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/
 
      _produces:_
 
         Freddie
         Herbie
         Ron
         Max
 
      This (somewhat contrived) example allows the inner loop to abandon
      processing early:
 
         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"
 
      _produces:_
 
         0:   0  1  2  3  4
         1:   5  6  7  8  9
         2:  10 11 12 13 14
         3:  15 16
 
 ------------------------------------------------------------------------
 
 
 Instance methods:
 -----------------
      [], call

refe

 ==== Continuation ====
 callcc { |cont| ... } の呼び出し
 は、直前の状態(ローカル変数の値、スタックフレーム)を cont に記憶
 してブロックを実行します。cont は、Continuation クラスのインスタ
 ンスで、Continuation#call [Continuation/call] メソッドを実行するこ
 とでいつでも記憶した状態を継続することができます。
 
 C 言語の setjmp()/longjmp() がわかる人は
         setjmp() == callcc {|c| }
         longjmp() == c.call
 と考えれば、わかりやすいかも知れません(ただし、callccスタックが深く
 なる方向にもジャンプ出来るという違いがあります)
 
 callcc() は、ブロック戻り値を返しますが、Continuation#call(args)
 が呼び出されたときは args を返します。
 
 : 例:
   以下は、Continuationによる無限ループの例
 
         def LOOP
           c = nil
           yield callcc {|c| true}
           c.call(false)
         end
 
         LOOP {|v| p v}
 
         => true
            false
            false
            false
              :
              :
 
 callcc とは、call-with-current-continuation の略です。
 ---- Singleton methods ----
 ---- Instance methods ----
 call
 ---- Singleton methods (inherited) ----
 ---- Instance methods (inherited) ----
 == === =~ __id__ __send__ _dump _load class clone display
 dup eql? equal? extend freeze frozen? hash id initialize
 initialize_copy inspect instance_eval instance_of?
 instance_variable_get instance_variable_set
 instance_variables is_a? kind_of? marshal_dump marshal_load
 method method_missing methods nil? object_id pretty_print
 pretty_print_cycle pretty_print_instance_variables
 private_methods protected_methods public_methods
 remove_instance_variable respond_to? send
 singleton_method_added singleton_method_removed
 singleton_method_undefined singleton_methods taint tainted?
 to_a to_ary to_hash to_int to_s to_str type untaint