class BasicObject

BasicObject is the parent class of all classes in Ruby. In particular, BasicObject is the parent class of class Object, which is itself the default parent class of every Ruby class:

class Foo; end
Foo.superclass    # => Object
Object.superclass # => BasicObject

BasicObject is the only class that has no parent:

BasicObject.superclass # => nil

Class BasicObject can be used to create an object hierarchy (e.g., class Delegator) that is independent of Ruby’s object hierarchy. Such objects:

  • Do not have namespace “pollution” from the many methods provided in class Object and its included module Kernel.

  • Do not have definitions of common classes, and so references to such common classes must be fully qualified (::String, not String).

A variety of strategies can be used to provide useful portions of the Standard Library in subclasses of BasicObject:

  • The immediate subclass could include Kernel, which would define methods such as puts, exit, etc.

  • A custom Kernel-like module could be created and included.

  • Delegation can be used via method_missing:

    class MyObjectSystem < BasicObject
      DELEGATE = [:puts, :p]
    
      def method_missing(name, *args, &block)
        return super unless DELEGATE.include? name
        ::Kernel.send(name, *args, &block)
      end
    
      def respond_to_missing?(name, include_private = false)
        DELEGATE.include?(name)
      end
    end
    

What’s Here

These are the methods defined for BasicObject:

  • ::new: Returns a new BasicObject instance.

  • !: Returns the boolean negation of self: true or false.

  • !=: Returns whether self and the given object are not equal.

  • ==: Returns whether self and the given object are equivalent.

  • __id__: Returns the integer object identifier for self.

  • __send__: Calls the method identified by the given symbol.

  • equal?: Returns whether self and the given object are the same object.

  • instance_eval: Evaluates the given string or block in the context of self.

  • instance_exec: Executes the given block in the context of self, passing the given arguments.

  • method_missing: Called when self is called with a method it does not define.

  • singleton_method_added: Called when a singleton method is added to self.

  • singleton_method_removed: Called when a singleton method is removed from self.

  • singleton_method_undefined: Called when a singleton method is undefined in self.

Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.