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