Class: Class

Inherits:
Module show all
Defined in:
object.c,
object.c

Overview

Classes in Ruby are first-class objects—each is an instance of class Class.

When a new class is created (typically using class Name ... end), an object of type Class is created and assigned to a global constant (Name in this case). When Name.new is called to create a new object, the new method in Class is run by default. This can be demonstrated by overriding new in Class:

class Class
   alias oldNew  new
   def new(*args)
     print "Creating a new ", self.name, "\n"
     oldNew(*args)
   end
 end

 class Name
 end

 n = Name.new

produces:

Creating a new Name

Classes, modules, and objects are interrelated. In the diagram that follows, the vertical arrows represent inheritance, and the parentheses meta-classes. All metaclasses are instances of the class ‘Class’.

                         +------------------+
                         |                  |
           Object---->(Object)              |
            ^  ^        ^  ^                |
            |  |        |  |                |
            |  |  +-----+  +---------+      |
            |  |  |                  |      |
            |  +-----------+         |      |
            |     |        |         |      |
     +------+     |     Module--->(Module)  |
     |            |        ^         ^      |
OtherClass-->(OtherClass)  |         |      |
                           |         |      |
                         Class---->(Class)  |
                           ^                |
                           |                |
                           +----------------+

Instance Method Summary collapse

Methods inherited from Module

#<, #<=, #<=>, #==, #===, #>, #>=, #alias_method, #ancestors, #append_features, #attr, #attr_accessor, #attr_reader, #attr_writer, #autoload, #autoload?, #class_eval, #class_exec, #class_variable_defined?, #class_variable_get, #class_variable_set, #class_variables, #const_defined?, #const_get, #const_missing, #const_set, constants, #constants, #define_method, #extend_object, #extended, #freeze, #include, #include?, #included, #included_modules, #instance_method, #instance_methods, #method_added, #method_defined?, #method_removed, #method_undefined, #module_eval, #module_exec, #module_function, #name, nesting, #private, #private_class_method, #private_instance_methods, #private_method_defined?, #protected, #protected_instance_methods, #protected_method_defined?, #public, #public_class_method, #public_instance_methods, #public_method_defined?, #remove_class_variable, #remove_const, #remove_method, #to_s, #undef_method

Constructor Details

#new(super_class = Object) ⇒ Class

Creates a new anonymous (unnamed) class with the given superclass (or Object if no parameter is given). You can give a class a name by assigning the class object to a constant.



1547
1548
1549
# File 'object.c', line 1547

static VALUE
rb_class_initialize(argc, argv, klass)
int argc;

Instance Method Details

#allocateObject

Allocates space for a new object of class’s class. The returned object must be an instance of class.

Returns:



1581
1582
1583
# File 'object.c', line 1581

VALUE
rb_obj_alloc(klass)
VALUE klass;

#inheritedObject (private)

Not documented



658
659
660
661
662
# File 'object.c', line 658

static VALUE
rb_obj_dummy()
{
    return Qnil;
}

#initialize_copyObject

:nodoc:



110
111
112
# File 'class.c', line 110

VALUE
rb_class_init_copy(clone, orig)
VALUE clone, orig;

#new(args, ...) ⇒ Object

Calls allocate to create a new object of class’s class, then invokes that object’s initialize method, passing it args. This is the method that ends up getting called whenever an object is constructed using .new.

Returns:



1622
1623
1624
# File 'object.c', line 1622

VALUE
rb_class_new_instance(argc, argv, klass)
int argc;

#superclassnil

Returns the superclass of class, or nil.

File.superclass     #=> IO
IO.superclass       #=> Object
Object.superclass   #=> nil

Returns:

  • (nil)


1648
1649
1650
# File 'object.c', line 1648

static VALUE
rb_class_superclass(klass)
VALUE klass;