Ruby 模块(Module)学习笔记

什么是模块

在 Ruby 中,模块是一种特殊的类,它不能被实例化。它主要用来作为代码的命名空间和代码的复用。

命名空间

使用模块来定义命名空间,可以避免方法名和常量名重复的问题。在模块内部定义的方法和常量都会成为该模块的私有方法和常量。

rubyCopy Code
module MyModule MY_CONSTANT = "hello world" def self.my_method puts MY_CONSTANT end end MyModule.my_method # 输出 hello world

复用代码

模块也可以作为一种代码的复用方式,我们可以将一些通用的方法或者常量定义在模块中,然后在类或者其他模块中混入该模块,以达到代码复用的目的。

rubyCopy Code
module MyModule def my_method puts "this is my method" end end class MyClass include MyModule end obj = MyClass.new obj.my_method # 输出 this is my method

实例

ActiveSupport::Concern

ActiveSupport::Concern 是 Rails 中非常常用的一个模块,它主要用于定义一些在类中共享的方法和常量。

rubyCopy Code
require 'active_support/concern' module MyModule extend ActiveSupport::Concern included do validates_presence_of :name end def my_method puts "this is my method" end end class MyClass include MyModule end obj = MyClass.new obj.my_method # 输出 this is my method

在上面的代码中,我们定义了一个 MyModule 模块,通过 extend ActiveSupport::Concern 可以使用 included 方法来定义模块中要共享的方法和常量。然后在 MyClass 类中 include 该模块即可。