public Method

Module.remove_class_variable(p1)

remove_class_variable(sym)     obj

Removes the definition of the sym, returning that constant’s value.

class Dummy
  @@var = 99
  puts @@var
  remove_class_variable(:@@var)
  puts(defined? @@var)
end

produces:

99
nil

Source Code

/*
*  call-seq:
*     remove_class_variable(sym)    => obj
*  
*  Removes the definition of the <i>sym</i>, returning that
*  constant's value.
*     
*     class Dummy
*       @@var = 99
*       puts @@var
*       remove_class_variable(:@@var)
*       puts(defined? @@var)
*     end
*     
*  <em>produces:</em>
*     
*     99
*     nil
*/

VALUE
rb_mod_remove_cvar(mod, name)
   VALUE mod, name;
{
   ID id = rb_to_id(name);
   VALUE val;

   if (!rb_is_class_id(id)) {
rb_name_error(id, "wrong class variable name %s", rb_id2name(id));
   }
   if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't remove class variable");
   if (OBJ_FROZEN(mod)) rb_error_frozen("class/module");

   if (RCLASS(mod)->iv_tbl && st_delete(ROBJECT(mod)->iv_tbl, (st_data_t*)&id, &val)) {
return val;
   }
   if (rb_cvar_defined(mod, id)) {
rb_name_error(id, "cannot remove %s for %s",
	 rb_id2name(id), rb_class2name(mod));
   }
   rb_name_error(id, "class variable %s not defined for %s",
	  rb_id2name(id), rb_class2name(mod));
   return Qnil;		/* not reached */
}
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.