Sam Kong wrote:

> Hi,
> 
> I'm trying to understand continuation.
> There's some confusion in the following:
> 
> In top-level,
> 
> [1]
> callcc { |c| $label = c }
> #...some other code here
> $label.call
> 
> [2]
> $label = callcc { |c| c }
> #...some other code here
> $label.call
> 
> 
> Are they same or different?
> As I understand it, callcc returns the last expression or return value
> of c.call.
> Thus, basically [1] and [2] should be same, right?
> But I'm not sure.
> Can anyone explain it, please?

callcc returns the return value of its block, the first time. Later, it 
returns the value it was called with.
If you test [2], you'll see the error message:
   undefined method `call' for nil:NilClass (NoMethodError)

Try
   $label = callcc {|c| c}
   $label.call(3)

and
   $label = callcc {|c| puts "first call"; c}
   $label.call(lambda{puts "second call"})

to understand what's going on.
--