Namespaces in Ruby

22 Oct, 2021
A namespace is a container for multiple items which includes classes, constants, other modules, and more. It is ensured in a namespace that all the objects have unique names for easy identification. Generally, they are structured in a hierarchical format so, that names can be reused.  
Namespace in Ruby allows multiple structures to be written using hierarchical manner. Thus, one can reuse the names within the single main namespace.
The namespace in Ruby is defined by prefixing the keyword module in front of the namespace name.
The name of namespaces and classes always start from a capital letter.
You can access the sub members of double with the help of :: operator. It is also called the constant resolution operator.
Ruby allows nested namespace.
You can use include keyword to copy the other module’s objects into the existing namespace without qualifying their name.
Syntax:  
module Namespace_name
    # modules.. and classes..
end
Example 1: This is an example of the simple formation of the namespace with a class and then executing the class methods defined within the class. Here, we access the sub members within the namespace, the “::” operator is used. It is also called the constant resolution operator.  
Ruby
# Ruby program to illustrate namespace # Defining a namespace called Geekmodule Geek    class GeeksforGeeks               # The variable gfg        attr_reader :gfg                 # Class GeeksforGeeks constructor        def initialize(value)            @gfg = value        end    endend # Accessing the sub members of# module using '::' operatorobj = Geek::GeeksforGeeks.new("GeeksForGeeks")puts obj.gfg
Output:  
GeeksForGeeks
Example 2: This is an example showing the implementation of hierarchical namespacing. In this, there is a combination of class and namespace within the single namespace. Here, the use of the class name is done multiple times under the concept of hierarchical namespacing.  
Ruby
# Ruby program to illustrate namespace # The main namespacemodule Geek    class GeeksforGeeks        attr_reader :gfg        def initialize(value)            @gfg = value        end    end         # Hierarchical namespace    module Geek_1             # Reuse of the class names      class GeeksforGeeks        @@var = "This is the module Geek_1 " +                "and class GeeksforGeeks"        def printVar()            puts @@var        end      end    end         # Hierarchical namespace    module Geek_2             # Reuse of the class names      class GeeksforGeeks        attr_reader :var        def initialize(var)          @var = var        end      end    end  end obj_gfg = Geek::GeeksforGeeks.new("This is the module Geek " +                                  "and class GeeksforGeeks")obj_gfg1 = Geek::Geek_1::GeeksforGeeks.new()obj_gfg2 = Geek::Geek_2::GeeksforGeeks.new("This is the module Geek_2 " +                                           "and class GeeksforGeeks")puts obj_gfg.gfgputs obj_gfg1.printVar()puts obj_gfg2.var
Output:  
This is the module Geek and class GeeksforGeeks
This is the module Geek_1 and class GeeksforGeeks

This is the module Geek_2 and class GeeksforGeeks
 
gabaa406
Picked
Ruby
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Make a Custom Array of Hashes in Ruby?
Ruby | Enumerator each_with_index function
Ruby | unless Statement and unless Modifier
Ruby | Array class find_index() operation
Ruby For Beginners
Ruby | String concat Method
Ruby | Types of Variables
Ruby on Rails Introduction
Ruby | Array shift() function