Ruby边学边记(二)

作者: myserendipit | 来源:发表于2016-03-13 20:12 被阅读248次

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;             #可以调用会飞模块的"飞"方法

相关文章

  • Ruby边学边记(二)

    Ruby边学边记(二) Ruby模块 模块在Ruby里面有两个作用 把功能相同的方法放在同一个名称之下 方便调用方...

  • Ruby边学边记

    Ruby边学边记 该篇主要描述类 Ruby定义一个类 以@@开始的是类变量 以@开始的是实例变量 以$开始的是全局...

  • 边学边记边分享

    《你如何听懂我说话?》 你如何听懂我说的话,不在你,而在我的表达,且看黄执中老师的分享。 一.简单:表达目标或观点...

  • React边学边记

    **1. 组件 ** **2. state ** state 不能直接赋值,比如以下的代码 : state是异步的...

  • 边学边用,边用边学

    我一直想学很多东西,却一直没学好,甚至还没开始真正学习。 大学的时候,我就想学很多东西。想学习谈判,学习演讲,写一...

  • H.264边学边记

    这个是选摘张张H.264介绍,对他做了一些注释。 码流结构H.264的功能分为两层,视频编码层(VCL)和网络提取...

  • R语言边学边记1

    rstudio.com ##安装包 install.packages("ggplot2") #加载包 librar...

  • 学习时要边学边记

    起床就开始学习群里的内容,太多了,我草草翻看了一遍,可能是因为没有思考的缘故,基本上没记住多少内容。 但大意都是学...

  • 健身有感(二)边学边干

    这淅淅沥沥的小雨给我下了一天了、、、刷微博时看到一句捧腹大笑的话,“我曾经对你说过,你若安好,便是晴天。但从最近的...

  • 边学边观察边动脑。。

    好4月12晚上十点四十,安庆石化硫磺回收装置,正在进行着尾气焚烧炉的点火工作。。。 自2017年三月份以来,安庆石...

网友评论

    本文标题:Ruby边学边记(二)

    本文链接:https://www.haomeiwen.com/subject/xrfflttx.html