public Method

Kernel.at_exit

at_exit { block }  proc

Converts block to a Proc object (and therefore binds it at the point of call) and registers it for execution when the program exits. If multiple handlers are registered, they are executed in reverse order of registration.

def do_at_exit(str1)
  at_exit { print str1 }
end
at_exit { puts "cruel world" }
do_at_exit("goodbye ")
exit

produces:

goodbye cruel world

Source Code

/*
*  call-seq:
*     at_exit { block } -> proc
*  
*  Converts _block_ to a +Proc+ object (and therefore
*  binds it at the point of call) and registers it for execution when
*  the program exits. If multiple handlers are registered, they are
*  executed in reverse order of registration.
*     
*     def do_at_exit(str1)
*       at_exit { print str1 }
*     end
*     at_exit { puts "cruel world" }
*     do_at_exit("goodbye ")
*     exit
*     
*  <em>produces:</em>
*     
*     goodbye cruel world
*/

static VALUE
rb_f_at_exit()
{
   VALUE proc;

   if (!rb_block_given_p()) {
       rb_raise(rb_eArgError, "called without a block");
   }
   proc = rb_block_proc();
   rb_set_end_proc(call_end_proc, proc);
   return proc;
}
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.