Ruby 模块(Module)学习笔记
什么是模块
在 Ruby 中,模块是一种特殊的类,它不能被实例化。它主要用来作为代码的命名空间和代码的复用。
命名空间
使用模块来定义命名空间,可以避免方法名和常量名重复的问题。在模块内部定义的方法和常量都会成为该模块的私有方法和常量。
rubyCopy Codemodule MyModule
MY_CONSTANT = "hello world"
def self.my_method
puts MY_CONSTANT
end
end
MyModule.my_method # 输出 hello world
复用代码
模块也可以作为一种代码的复用方式,我们可以将一些通用的方法或者常量定义在模块中,然后在类或者其他模块中混入该模块,以达到代码复用的目的。
rubyCopy Codemodule 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 Coderequire '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 该模块即可。