美文网首页
ruby module 总结

ruby module 总结

作者: will2yang | 来源:发表于2018-04-08 22:22 被阅读0次

    1.Mix-in 扩展

    module MyModule # 共通的方法等
    end
    class MyClass1
    include MyModule
    # MyClass1中独有的方法
    end
    class MyClass2
    include MyModule
    # MyClass2中独有的方法
    end
    

    2.提供命名空间

    使用 模块名.方法 的方式调用方法 这样的方法称为 模块函数

    # 检查文件是否存在
    p FileTest.exist?("/usr/bin/ruby") #=> true
    # 文件大小
    p FileTest.size("/usr/bin/ruby") #=> 1374694
    

    3.module_function

    使用了module_function,就可以使用:“模块名 . 方法名”的形式调用

    module FooModule
      def foo
        p self
      end
      module_function :foo
    end
    FooModule.foo
    

    4.Mix-in

    module M
      def meth
        "meth" 
      end
    end
    class C
      include M
    end
    c = C.new
    p c.meth # =>  "meth"
    
    C.include?(M)   #=> true
    

    类 C 的实例在调用方法时,Ruby 会按类 C、模块 M、类 C 的父类 Object 这个顺序查找该 方法,并执行第一个找到的方法。被包含的模块的作用就类似于虚拟的父类。

    5.查找方法的规则

    1 同继承关系一样,原类中已经定义了同名的方法时,优先使用该方法。
    2 在同一个类中包含多个模块时,优先使用最后一个包含的模块。
    3 嵌套 include 时,查找顺序也是线性的,此时的关系如图 8.8 所示。
    4 相同的模块被包含两次以上时,第二次以后的会被省略。

    6.extend方法

    extend方法可以使单例类包含模块,并把模块的功能扩展到对象中.

    module Edition
      def edition(n)
        "#{self} 第#{n}版"
      end
    end
    str = "Ruby基础教程"
    str.extend(Edition)   #=> 将模块 Mix-in 进对象
    p str.edition(5) #=> "Ruby基础教程第5版"
    

    include 可以帮助我们突破继承的限制,通过模块扩展类的功能;而 extend 则可以帮助 我们跨过类,直接通过模块扩展对象的功能。

    相关文章

      网友评论

          本文标题:ruby module 总结

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