模块(Module)
基础
- 定义了一个命名空间,相当于一个沙盒
- 方法和常量不会与其他地方的方法常量冲突。
模块类似与类,但有以下不同:
- 模块不能实例化
- 模块没有子类
- 模块只能被另一个模块定义
- 模块常量命名与类常量命名类似,以大写字母开头。
- 方法定义看起来也相似:模块方法定义与类方法定义类似。
语法
module Identifier
statement1
statement2
...........
end
例子
module Trig
# 定义常量
PI = 3.141592654
# 定义方法
def Trig.sin(x)
# ..
puts "=== #{x}"
end
end
# 访问模块内的常量
puts "#{Trig::PI}"
# 调用模块内的方法
puts "#{Trig.sin(200)}"
输出
3.141592654
=== 200
require 语句
require
语句来加载模块文件
语法
$LOAD_PATH << '.'
require filename
$LOAD_PATH
: 用来指定模块的加载路径,.
表示从当前目录查找- 使用
require_relative
来从一个相对目录引用文件。
例子
include 语句
在类中使用模块
语法
include modulename
例子
# 引入模块
$LOAD_PATH << '.'
require 'Trig.rb'
class MyPreson
# 引入模块
include Trig
# 定义类方法
def MyPreson.say_hello
puts "== : #{Trig::PI}"
end
end
# 调用类方法
MyPreson.say_hello
输出
== : 3.141592654