首页 > 代码库 > Ruby学习之module

Ruby学习之module

我们可以认为module是一个专门存放一系列方法和常量的工具箱。

module和class非常像, 只是module不能创建实例也不能有子类, 它们仅仅能存放东西。

例如:

module Circle  PI = 3.141592653589793    def Circle.area(radius)    PI * radius**2  end    def Circle.circumference(radius)    2 * PI * radius  endend

 module书写格式

module ModuleName    #end

就像类名一样, module名也用大写字母,并且不使用下划线_。

module的一个最主要的作用是把方法和常量分离到一个有名字的空间中,这个空间叫做名字空间(namespacing),这样就不会混淆例如Math::PI和Circle::PI这两种不同的PI值。两个冒号::被称作范围解析操作符, 它用来告诉Ruby去哪找到我们所需要的那个值或方法,如果我们想找Math::PI,Ruby知道要到Math的module中去找PI。

 

一些module已经包含在了Ruby解释器中,但是有些需要显式地包含进来, 我们可以用关键字require,如下:

require "module"

如果我们想要用Ruby的Date module来显示今天的日期, 但是我们还没有用require把它包含进来,那么我们需要进行如下操作:

require "date"puts Date.today

 

我们当然可以用require包含更多的module, 但是我们还可以用include关键字

任何类如果include了一个module,那么这个类可以使用这个module的方法。

使用include有一个好处, 那就是我们不再必须写包含常量或方法的module名了,因为module中所有的信息都已经包含进了include这个module的类, 我们可以直接使用PI而不用Math::PI, 如下:

class Angle  include Math  attr_accessor :radians    def initialize(radians)    @radians = radians  end    def cosine    cos(@radians)  endendacute = Angle.new(1)acute.cosine

 

Ruby学习之module