📜  Ruby 中的命名空间

📅  最后修改于: 2022-05-13 01:55:33.373000             🧑  作者: Mango

Ruby 中的命名空间

命名空间是多个项目的容器,其中包括类、常量、其他模块等。在命名空间中确保所有对象都具有唯一的名称,以便于识别。通常,它们以分层格式构造,因此可以重用名称。

  • Ruby 中的命名空间允许使用分层方式编写多个结构。因此,可以重用单个主命名空间中的名称。
  • Ruby 中的命名空间是通过在命名空间名称前面添加关键字模块来定义的。
  • 命名空间和类的名称总是以大写字母开头。
  • 您可以在 :: 运算符的帮助下访问 double 的子成员。它也称为常量分辨率运算符。
  • Ruby 允许嵌套命名空间。
  • 您可以使用 include 关键字将其他模块的对象复制到现有命名空间中,而无需限定它们的名称。

句法:

module Namespace_name
    # modules.. and classes..
end

示例 1:
这是一个简单的使用类形成命名空间然后执行类中定义的类方法的示例。在这里,我们访问命名空间内的子成员,使用“::”运算符。它也称为常量分辨率运算符。

Ruby
# Ruby program to illustrate namespace
 
# Defining a namespace called Geek
module Geek
    class GeeksforGeeks
         
      # The variable gfg
        attr_reader :gfg
         
        # Class GeeksforGeeks constructor
        def initialize(value)
            @gfg = value
        end
    end
end
 
# Accessing the sub members of
# module using '::' operator
obj = Geek::GeeksforGeeks.new("GeeksForGeeks")
puts obj.gfg


Ruby
# Ruby program to illustrate namespace
 
# The main namespace
module 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.gfg
puts obj_gfg1.printVar()
puts obj_gfg2.var


输出:

GeeksForGeeks

示例 2:
这是一个显示分层命名空间实现的示例。在这种情况下,单个命名空间内有类和命名空间的组合。在这里,类名的使用是在分层命名空间的概念下多次完成的。

红宝石

# Ruby program to illustrate namespace
 
# The main namespace
module 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.gfg
puts obj_gfg1.printVar()
puts obj_gfg2.var

输出:

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