美文网首页
Ruby 语法 (模块)

Ruby 语法 (模块)

作者: _西风凋碧树 | 来源:发表于2019-04-11 13:15 被阅读0次

    模块案例

    与类不同的是,模块没有实例对象的概念,使用MyModule.new会报错

    module MyModule
        def self.module_function
            puts "这是模块方法"
        end
    end
    
    module MyModule
        CONST = "这是模块中的常量"
        module MySubModule
            CONST = "这是子模块中的常量"
        end
    end
    
    puts MyModule.class # 输出为Module
    MyModule.module_function # 输出 这是模块方法
    # 还可以用::来引用模块中的模块或方法
    MyModule::module_function # 输出这是模块的方法
    puts MyModule::CONST
    puts MyModule::MySubModule::CONST
    

    加载和混入模块(require、load、include、extend)

    require和load的用法

    如果传入的文件不包含的路径,lode和require会自动在当前的加载目录中(加载目录都存储在全局数组 $: 中)

    load 'filename.rb' # 加载filename.rb文件
    require 'yaml' # 加载yaml库,通常也是加载yaml.rb文件
    

    include和extend不会自动加载文件,他们的作用只是将模块混入或扩展到已有的模块或者类。

    module MyModule
        def module_method
            puts "module_method"
        end
    end
    
    class MyClass
        include MyModule
    end
    
    class MyClass1
        extend MyModule
    end
    
    my_class = MyClass.new
    # 类中使用include,模块中的方法变成了实例方法
    my_class.module_method
    
    # 类中使用的extend,模块中的方法变成了类方法
    MyClass1.module_method
    
    
    # 所有对象都可以extend模块 而获得模块中的方法
    aa = 123
    aa.extend(MyModule)
    aa.module_method
    

    相关文章

      网友评论

          本文标题:Ruby 语法 (模块)

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