zoukankan      html  css  js  c++  java
  • ruby 中的 module

    • Module是Class的父类:
      >> Class.superclass
      => Module

    • module 没有实例变量

    • module 没有new不能生成实例对象

    module内可以有常量

    >> module Test
    >>   PI=3.14
    >> end
    => 3.14
    >> Test.PI
    >> Test::PI
    => 3.14
    

    module的方法有两种,一种是module方法,这类方法可以直接调用。

    >> module Test
    >>   def Test.test_method
    >>     puts "hello from module"
    >>   end
    >> end
    => nil
    >> Test::test_method
    hello from module
    => nil
    

    另一种是没有module名字的方法,这种方法不能直接调用,需要mixin到一个类中。

    >> module Test
    >> def hello
    >>   puts "hello"
    >> end
    >> end
    => nil
    >> Test::hello
    NoMethodError: undefined method `hello' for Test:Module
        from (irb):23
    

    把module的方法添加到类中有两种方法。

    一种是include,方法会被添加到实例方法中。

    一种是extend,方法会被添加到类方法中。

    继续前面的module Test的例子

    >> class Class1
    >> include Test
    >> end
    => Class1
    >> Class1.new.hello
    hello
    => nil
    >> class Class2
    >> extend Test
    >> end
    => Class2
    >> Class2.hello
    hello
    => nil
    

    module常用的一个hook/callback是included方法,这个方法在module被include到一个类中的时候会被调用。

    >> module Test
    >>   def self.included(cls)
    >>     puts "including module in class #{cls.name}"
    >>    end
    >> end
    => nil
    >> class Class1 
    >>   include Test
    >> end
    including module in class Class1
    => Class1
    

     

  • 相关阅读:
    MySQL:procedure, function, cursor,handler
    Spring:ApplicationContext (2)
    Dojo: Quick Start
    Linux:常用命令
    Squirrel: 通用SQL、NoSQL客户端
    湖南师范大学邮箱申请及
    一文读懂基因测序技术的前世今生
    一 二 三代测序技术
    浅议基因测序技术的代际:后记
    浅议基因测序技术的代际
  • 原文地址:https://www.cnblogs.com/wangyuyu/p/3549866.html
Copyright © 2011-2022 走看看