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边学边记(二)

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