1. 提供命名空间(namespace)
命名空间(namespace)是为了让方法,常数,类名称不互相冲突而设计的机制。
2. 以模块形式提供的方法必须使用"模块名.方法名"的方式调用。以这种形式调用的方法又称为模块函数。
3. 在类的定义内使用include, 将模块所定义的方法与常数纳入类定义里。
4. 定义模块
5. 例子:
6. 模块内部也可以定义方法,只是方法在定义之后,只能在模块内部调用。要将方法对模块外部公开,必须使用module_function。
7.
命名空间(namespace)是为了让方法,常数,类名称不互相冲突而设计的机制。
2. 以模块形式提供的方法必须使用"模块名.方法名"的方式调用。以这种形式调用的方法又称为模块函数。
3. 在类的定义内使用include, 将模块所定义的方法与常数纳入类定义里。
4. 定义模块
module 模块名
模块定义
end
5. 例子:
# -*- coding: utf-8 -*-
=begin
描述了模块的使用方式
=end
module HelloModule # module 语句
Version = "1.0" # 定义常数
def hello(name) # 定义方法
print "Hello, ", name, ".\n"
end
module_function :hello # 将hello以模块函数形式公开
end
p HelloModule::Version # => "1.0"
p HelloModule::hello("Alice") # => Hello, Alice.
# nil
p HelloModule.hello("Alice") # 同上
include HelloModule # 读入
p Version
hello("Jack")
6. 模块内部也可以定义方法,只是方法在定义之后,只能在模块内部调用。要将方法对模块外部公开,必须使用module_function。
7.
# -*- coding: utf-8 -*-
=begin
在模块函数内引用self(接受者), 可以取得改模块本身。这样就可以使用模块函数去改写模块本身的状态了,
但一般来说模块函数通常不会去使用self。
=end
module FooModule
def foo
p self
end
module_function :foo
end
FooModule.foo # => FooModule