Ruby module 模块

  1. 实例方法和常量的使用
  2. 使用模块的变量和模块方法
  3. 建立层级关系

Ruby 中的模块提供了一个独立的命名空间,可以放置方法和常量,甚至是变量。

实例方法和常量的使用

module MyModule
  def my_method
    puts 'Hello'
  end
  MY_CONSTANT = 'constant'
end

# 通过模块获取常量 puts MyModule::MY_CONSTANT # => 'constant'
class Foo include MyModule end
# 通过实例使用方法 Foo.new.my_method # => "Hello"
# 通过类获取常量 puts Foo::MY_CONSTANT # => 'constant'

使用模块的变量和模块方法

module MyModule
  class << self
    attr_accessor :module_var

def module_method puts "module_method" end end
self.module_var = "module_var" end
puts MyModule.module_var # => "module_var" MyModule.module_method # => "module_method"

建立层级关系

类似于python的import层级,ruby可以用module来建立层级关系,在module中再require其他的module.

这里就有个设计技巧,将corerequire所有下一个层级,这样include的时候就不用再require了。

例如:

core.rb
# All in this require 

module Aio
# debugger #require 'byebug'
# License require "aio/license"
# UI require "aio/ui"
# Base require "aio/base"
# Text require "aio/core/text"
# Module require "aio/core/module" require "aio/core/module_manager" require "aio/core/module_loader"
# Warning require "aio/core/warning"
# Device require "aio/core/device" require "aio/core/device_manager"

其他文件只需要require 'core'就可以了

other_file.rb
require 'core'

include Aio::UI

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com