Ruby边学边记(二)

Ruby边学边记(二)

Ruby模块

模块在Ruby里面有两个作用

  • 把功能相同的方法放在同一个名称之下
  • 方便调用方法

模块(Module)是一种把方法、类和常量组合在一起的方式。模块(Module)为您提供了两大好处。

  • 模块提供了一个命名空间和避免名字冲突。
  • 模块实现了 mixin 装置。

模块(Module)定义了一个命名空间,相当于一个沙盒,在里边您的方法和常量不会与其他地方的方法常量冲突。
模块类似与类,但有一下不同:

  • 模块不能实例化
  • 模块没有子类
  • 模块只能被另一个模块定义

1.模块示例

创建一个Hello模块的范例

模块方法定义与类方法定义类似。
ruby中的module与.net中的namespace有点类似,可以用来区分同名但属于不同开发者(或组织)的代码。

#!/usr/bin/ruby                

module Hello                    #模块名的首写字母与类一样都必须大写
include Math #包含一个模块(可以理解为c#中的引用命名空间),假设Math模块中有sqrt方法

    def self.hello_python        #self为关键字
        print "Hello Python!"
    end
    def self.hello_ruby
        print "Hello Ruby!"
    end

    name = "Ruby"
        
    

end

puts Hello::name  #引用常量用双冒号
puts Math::sqrt()    #通过完整引用来调用Math中的sqrt方法
puts Math.sqrt()    #效果与上面相同

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

这里用一个案例说明可能会更好理解

定义一个鸭子类,会游泳,有游泳方法;野鸭不仅会游泳还会飞;黑鸭就是普通的鸭子;所以可以这么设计:

#鸭子类
class Duck
    def swim
        print self.class , " can swim...\n";
    end
end
 
#"会飞的"模块
module FlyModule
    def fly
        print " and I can fly...\n"
    end
end
 
#野鸭(会飞,会游)
class Mallard < Duck
    include FlyModule #导入模块后,该类即具有模块中定义的方法(可以理解为实现了接口)
end
 
#黑鸭(只会游泳)
class Coot < Duck    #继承Duck类
    def Color
        "Black"
    end
end
 
aCoot = Coot.new    #实例化黑鸭对象
aCoot.swim;         #可以调用基类鸭子的swim方法

aMallard = Mallard.new    #实例化野鸭对象
aMallard.swim;        
aMallard.fly;             #可以调用会飞模块的"飞"方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简史 Ruby 出身于所谓的脚本语言家族,是一种解释型、面向对象、动态类型的语言 。解释型,意味着Ruby代码由解...
    alighters阅读 3,744评论 0 5
  • Ruby是一门单一继承的面向对象语言,那么在内部结构上,它是以object为根节点的树形结构的类图,那么我们在Ru...
    falm阅读 5,324评论 0 1
  • 这几天在看《Blake Mirror 》,看得很慢,几十分钟的影片之后只有震撼。 编剧Charlie Brooke...
    荷亦阅读 2,910评论 0 0
  • 我独自居住在无人的岛屿 日光、青草、篱笆 将我分解 一排房屋不知是何人所留 也许是第一个探索者 他克服风暴 在荒凉...
    容铮阅读 1,711评论 0 1

友情链接更多精彩内容