📜  红宝石 |模块

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

红宝石 |模块

模块是方法、常量和类变量的集合。模块被定义为一个类,但使用module关键字而不是 class 关键字。

关于模块的要点:

  • 您不能继承模块,也不能创建模块的子类。
  • 不能从模块创建对象。
  • 模块用作命名空间和混合。
  • 所有的类都是模块,但所有的模块都不是类。
  • 该类可以使用命名空间,但不能像模块那样使用 mixin。
  • 模块名称必须以大写字母开头。

句法:

module Module_name

   # statements to be executed

end

例子:

# Ruby program to illustrate 
# the module
    
# Creating a module with name Gfg
module Gfg
      
    C = 10;
    
    # Prefix with name of Module
    # module method 
    def Gfg.portal
        puts "Welcome to GFG Portal!"
    end
        
    # Prefix with the name of Module
    # module method
    def Gfg.tutorial  
        puts "Ruby Tutorial!"
    end
        
    # Prefix with the name of Module
    # module method
    def Gfg.topic  
        puts "Topic - Module"
    end
      
end
   
# displaying the value of 
# module constant
puts Gfg::C
  
# calling the methods of the module
Gfg.portal
Gfg.tutorial
Gfg.topic

输出:

10
Welcome to GFG Portal!
Ruby Tutorial!
Topic - Module

笔记:

  • 定义模块方法,用户必须在定义方法时在模块名称前加上方法名称。定义模块方法的好处是用户可以通过简单地使用模块名称和点运算符来调用此方法,如上例所示。
  • 用户可以使用双冒号运算符( : :)访问模块常量的值,如上例所示。
  • 如果用户将仅在模块内定义一个带有 def 关键字的方法,即 def method_name ,那么它将被视为实例方法。用户无法使用点运算符直接访问实例方法,因为他无法创建模块的实例。
  • 要访问模块中定义的实例方法,用户必须将模块包含在一个类中,然后使用类实例来访问该方法。下面的例子清楚地说明了这个概念。
  • 用户可以使用include关键字在类中使用模块。在这种情况下,模块就像命名空间一样工作。

例子:

# Ruby program to illustrate how 
# to use module inside a class
   
# Creating a module with name Gfg
module Gfg
   
    # module method 
    def portal
        puts "Welcome to GFG Portal!" 
    end
       
    # module method
    def tutorial  
        puts "Ruby Tutorial!" 
    end
       
    # module method
    def topic  
        puts "Topic - Module" 
    end
      
end 
  
  
# Create class
class GeeksforGeeks
   
    # Include module in class
    # by using 'include' keyword
    include Gfg
       
    # Method of the class
    def add
        x = 30 + 20
        puts x
    end
      
end
       
# Creating objects of class 
obj_class =  GeeksforGeeks.new
       
# calling module methods
# with the help of GeeksforGeeks
# class object
obj_class.portal 
obj_class.tutorial
obj_class.topic
  
# Calling class method 
obj_class.add 

输出:

Welcome to GFG Portal!
Ruby Tutorial!
Topic - Module
50

模块的使用:模块是一种对方法和常量进行分类的方式,以便用户可以重用它们。假设他想编写两个方法,并且还想在多个程序中使用这些方法。所以,他会将这些方法写在一个模块中,这样他就可以在任何程序中借助require关键字轻松调用该模块,而无需重新编写代码。

例子:

# Ruby program for creating a module
  
# define module
module Gfg
  
    # module method 
    def Gfg.portal()
          
        puts "Module Method 1"  
    end
      
    # module method 
    def Gfg.tutorial()
          
        puts "Module Method 2"  
    end
  
end  

注意:将此程序保存在名为my.rb的文件中。您可以在require 关键字的帮助下将其用于另一个程序。这就像在 C/C++ 程序中包含头文件一样。

使用命令:

ruby my.rb

现在创建另一个包含以下代码的文件:

# Ruby program to show how to use a 
# module using require keyword
  
# adding module 
require "./my.rb"
  
# calling the methods of module Gfg
Gfg.portal()
Gfg.tutorial()

将此文件另存为my1.rb

使用命令:

ruby my1.rb

输出:

Module Method 1
Module Method 2