• 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

ruby 中的 module的更多相关文章

  1. Ruby中实现module继承

    module FooModule  def self.included base    base.extend ClassMethods  end module ClassMethods    def ...

  2. 理解Ruby中的作用域

    作用域对于Ruby以及其它编程语言都是一个需要理解的至关重要的基础知识.在我刚开始学习ruby的时候遇到很多诸如变量未定义.变量没有正确赋值之类的问题,归根结底是因为自己对于ruby作用域的了解不够, ...

  3. Ruby学习之module

    我们可以认为module是一个专门存放一系列方法和常量的工具箱. module和class非常像, 只是module不能创建实例也不能有子类, 它们仅仅能存放东西. 例如: module Circle ...

  4. [Ruby学习总结]Ruby中的类

    1.类名的定义以大写字母开头,单词首字母大写,不用"_"分隔 2.实例化对象的时候调用new方法,实际上调用的是类里边的initialize方法,是ruby类的初始化方法,功能等同 ...

  5. ruby中的alias和alias_method

    ruby中的alias和alias_method都可以重命名一个方法,它们的区别如下: 1.alias是ruby的一个关键字,因此使用的时候是alias :newname :oldname alias ...

  6. 雷林鹏分享:Ruby 模块(Module)

    Ruby 模块(Module) 模块(Module)是一种把方法.类和常量组合在一起的方式.模块(Module)为您提供了两大好处. 模块提供了一个命名空间和避免名字冲突. 模块实现了 mixin 装 ...

  7. ruby中的回调方法和钩子方法

    在ruby中,当某些特定的事件发生时,将调用回调方法和钩子方法.事件有如下几种: 调用一个不存在的对象方法 类混含一个模块 定义类的子类 给类添加一个实例方法 给对象添加一个单例方法 引用一个不存在的 ...

  8. Ruby中区分运行来源的方法(转)

    Ruby中区分运行来源的方法 这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if name == 'main':效果,其实Ruby中也有类似语法,需要的朋友可以参考下 ...

  9. ruby中的方法查找

    ruby中的方法调用都是 对象.方法 的形式,那么对象如何找到这个方法呢? 首先必须了解祖先链的概念,祖先链就是从一个类开始,到它的父类,再到父类的父类...一直到最终的起点(ruby中是BasicO ...

随机推荐

  1. Dwz(J-UI)框架--入门

    http://www.cnblogs.com/chenyongsai/p/4933982.html Dwz(J-UI)框架--入门 一.了解 概述:是中国人自己开发的基于jQuery实现的Ajax R ...

  2. Get size of all tables in database

    http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database SELECT t.NAME AS Table ...

  3. 查看sql server数据库连接数的三种方法

    怎样才能查看sql server数据库连接数呢?下面就将为您介绍三种查看的方法,供您参考,希望能够帮助到您. 1.通过系统的“性能”来查看:开始->管理工具->性能(或者是运行里面输入 m ...

  4. redis开机自启动脚本(linux)

    目前redis放在home下的文件夹中,写一个脚本,待系统启动的过程中,去启动该脚本. 脚本:redis.sh #!/bin/sh /home/juepei/Downloads/redis-3.0.0 ...

  5. C#开发微信小程序

    个人见解,欢迎交流,不喜勿喷.   微信小程序相比于微信公众号的开发,区别在于微信小程序只请求第三方的数据,整个界面的交互(view)还是在微信小程序上实现,前后端完全分离,说白了,微信小程序开发与具 ...

  6. 利用bootstrap上传视频文件,mvc做后台处理

    @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...

  7. 网易云安全DDoS高防全新上线 ,游戏防护实力领先

    本文由  网易云发布.       10月24日,网易云安全(易盾)正式上线DDoS高防解决方案[点击查看].基于网易20年网络安全防护经验,网易云安全(易盾)DDoS高防可提供1T超大防护带宽,拥有 ...

  8. 如何将Spring Boot项目打包部署到外部Tomcat

    1.项目打包     项目开发结束后,需要打包部署到外部服务器的Tomcat上,主要有几种方式. (1)生成jar包 cd 项目跟目录(和pom.xml同级)mvn clean package## 或 ...

  9. Weekly Contest 128

    1012. Complement of Base 10 Integer Every non-negative integer N has a binary representation.  For e ...

  10. Android逆向进阶——让你自由自在脱壳的热身运动(dex篇)

    本文作者:HAI_ 0×00 前言 来看看我们今天的主题. 让你自由自在脱壳的热身运动. 现在很多第厂家都是使用第三方的加固方式来进行加固的.或者使用自己的加固方式进行加固. 那么我们必不可少的就是脱 ...