陈斌彬的技术博客

Stay foolish,stay hungry

Ruby - Module(原创)

1. 模块示例

创建一个 Hello 模块的范例:

#!/usr/bin/ruby                #文件名为module.rb

module Hello                    #模块名的首写字母与类一样都必须大写
    def self.hello_python        #self为关键字
        print "Hello Python!"
    end
    def self.hello_ruby
        print "Hello Ruby!"
    end
end

Hello.hello_python
Hello.hello_ruby                #调用模块中的方法

运行:

img

2. require 语句

require 语句与 C 语言中的 include 类似,是用来加载模块文件的。

范例:

#!/usr/bin/ruby

$LOAD_PATH  <<  ‘.’    #在当前目录搜索被引用文件
require  'module'        #或者是require  'module.rb' ,这里填的是文件名

Hello.hello_python
Hello.hello_ruby        #调用Hello模块中的方法

运行:

img

3. 在类中引用模块 -include

范例: 现有模块文件

#!/usr/bin/ruby        #文件名为support.rb

module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   end
end

现在在类中来引用这个模块

 1 #!/usr/bin/ruby
 2
 3 $LOAD_PATH << '.'
 4 require "support"
 5
 6 class Decade
 7   include Week
 8   no_of_yrs=10
 9   def no_of_months
10     puts Week::FIRST_DAY
11     number=10*12
12     puts number
13   end
14 end
15
16 puts Week::FIRST_DAY
17 Week.weeks_in_month
18 Week.weeks_in_year
19
20 test1=Decade.new
21 test1.no_of_months

运行:

img

4. mixins装置

在面向对象的语言中继承是非常重要的,但是 Ruby 不直接支持继承,幸运的是 Ruby 的模块提供了 mixins 装置,而这几乎消除了对多重继承的需要。

举例:

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end

class Sample
include A
include B
   def s1
   end
end
samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1

在模块 A 中包含了方法 a1 和 a2,模块 B 包含了 b1 和 b2。同时类 Sample 中包含了模块 A 和 B,因此类Sample 继承了两个模块,可以访问模块 A 和 B 包含的四个方法。