• ruby中的模块


    什么是模块

    模块(module)是Ruby特有的功能之一。类用来表现具有数据与行为(程序)的"东西",

    而模块大致来说,则是只有程序部分的集合体。类与模块最大的不同在于:

    1.模块不能建立实例

    2.模块不能继承

    模块的用法

    (1)提供命名空间

    命名空间(namespace)是为了让方法、常数、类名称不互相冲突而设计的机制。命名时

    名称简洁明快虽然是个好习惯,但像size、start这种太普通的名称可能就很容易重复。

    这时,定义成模块的内部名称,可防止名称的冲突。

    例如:Ruby将取得文件信息的相关功能都放在File模块里。以模块形式提供的方法

    必须使用"模块名.方法名"的方式调用。以这种形式调用的方法又称为模块函数。

    #查询文件是否存在

    p File.exist?("text.txt")   #=>true

    #档案大小

    p File.size("text.txt")     #=>6389

    当模块内部定义的方法及常数的名称没有与现在命名空间冲突时,省略模块名称会比较方便.

    使用include可以将模块所拥有的方法名称与常数名称读入现在的命名空间里。

    例如,数值运算用的Math模块:

    # 圆周率(常数)

    p Math::PI       #=>3.141592653589793

    # 2的平方根

    p Math.sqrt(2)   #=>1.4142135623730951

    include Math

    p PI             #=>3.141592653589793

    p sqrt(2)        #=>1.4142135623730951

    像这样,将相关的各种功能整理成一个模块,可以以相同的命名空间来管理这些功能。

    (2)以Mix-in方式提供功能

    将模块混进类里,成为”Mix-in“。在类的定义内使用include,可以将模块里所定义的方

    法与常数纳入类定义里。

    module MyModule

      # 想要共同提供的方法等

    end

    class MyClass1

      include MyModule

      #MyClass1 所特有的方法

    end

    class MyClass2

      include MyModule

      #MyClass2 所特有的方法

    end

    像这样,就能将MyClass1与MyClass2双方共同的功能定义在MyModule中。这与类继承很

    相似,但用于这种时候:

    a.两个类只是具有相似功能,并不想归类于相同类型(类)时;

    b.Ruby的继承不允许同时又多个父类,已继承别的父类时,就无法再以继承的方式加上其它功能

    这些情况就可以使用Mix-in更弹性地处理。

    继承与Mix-in的关系将在后续文章中再详细介绍。

  • 相关阅读:
    elk
    js时间处理
    idea首次提交项目
    kafka集群zookeeper集群详细配置
    单节点多节点等等详细解释
    kafka原理存储
    Thread-0" kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
    如何使用JMeter开源性能测试工具来构建Web性能测试体系
    自动化测试的理解
    VBS教程
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3151369.html
Copyright © 2020-2023  润新知