`
wangdeshui
  • 浏览: 248296 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一步一步学Ruby(十三):Ruby模块

阅读更多

Class类是Module的子类,类是一种特殊形式的模块,这个可看我的这篇文章 一步一步学Ruby(五): Class, Module, Object,Kernel的关系

我们知道最顶级的类是Object,那么最顶级的模块就是Kernel

我们使用模块的的主要目的是用来组织代码,模块化代码,有点类似命名空间,但却有很大的不同

一、创建和使用模块

用module关键字来定义模块

image

module没有实例,我们使用时把module混合到类中来使用,我们也可以这么理解,把Module里的内容拷贝一份放到类里,成为类的一部分

image

我们可以把模块放到一个单独的文件里,然后使用时进行加载,看下面的示例,假设我们有一个project.rb的文件,包含了Project模块

image

我们将Project混合到Manager类里

image

注意: 在使用require或load时,请求加载的内容放到引号里,而inclue不是用引号,这是因为require或load使用字符串做为参数,而include使用常量形式的模块名,require和load使用字符串变量也可以.

二、混合进模块的类的方法查找

image

上面say方法查找路径为 D类-->D类里包含的模块-->C类-->C类包含的模块......>Object-->Kernel,当找到第一个时,搜索停止。

同名方法的查找,后面覆盖前面的

image

用super提升查找路径(调用查找路径上下一个匹配的方法),同样我们使用super可以调用父类的同名方法,initialize是自动执行

image

  • super 调用时,自动传递当前的参数
  • super(),不传任何参数
  • super(a,b,c) 传递指定的参数

三、模块和类可以相互嵌套

module也可以包含类,但调用时需要这样使用 模块名::类名.new

image

 

本文作者: 王德水

未经同意,禁止转载

分享到:
评论

相关推荐

    ruby+watir安装包,安装步骤

    1.默认路径安装ruby186-26.exe 2.本地安装watir-1.4.1.gem,执行gem install watir-1.4.1.gem -l 3.本地安装rubygems-update-1.3.4.gem,执行 gem install rubygems-update-1.3.4.gem 4.更新rubygems,执行update_...

    coffeepot:Ruby on rails 中wavepot-runtime的coffeescript实现,即时编译

    为了实时编译,我使用了 websocket-rails 和 coffeescript-rails 模块。安装该应用程序适用于 ruby​​ 和 node.js; 如果你已经有了,你可以跳到Ruby您需要先在系统中安装 ruby​​,请按照以下步骤操作: 如果你...

    使用Ruby re模块创建复杂的正则表达式

    :19|20)[0-9]{2})[\- \/.](0[1-9]|1[012])[\- \/.](0[1-9]|[12][0-9]|3[01])\z/使用Re之后,正则表达式可以短小易读的表达式为基础,一步一步地构建出来,例如: 代码如下:require ‘re’ include Re delim = re....

    skunk:用于Ruby代码的SkunkScore计算器-查找没有测试覆盖范围的最复杂的代码!

    SkunkScore是一个评估模块技术债务的值。 它考虑到: 代码复杂度代码闻起来代码覆盖率SkunkScore的主要目标是在您的下一个重构冒险中充当指南针。 它将帮助您回答以下问题: 我该如何偿还技术债务? 什么是代码覆盖...

    Mac上搭建nginx+rtmp直播服务器的步骤详解

    已经安装了brow的可以直接跳过这一步。 执行命令 ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) 如果已经安装过,而想要卸载: ruby -e $(curl -fsSL ...

    CodeIgniter:php敏捷开发框架web快速开发详解

    一个好框架为你做出各种功能的实现,并且给你提供一步一步的编程指导。 提到框架时,就不能不提到著名的框架:Ruby on Rails。 Rails 做得相当成功,因为它籍由最少量的编码,提供简便快速的网站开发。本质上,它...

    domainlookuptools:域信息收集工具

    这是非常重要的一步,因为在此之后可以对网络进行清晰的评估。 良好的信息收集可以使成功的渗透测试与未能为客户提供最大利益的测试有所不同。使用方法该系统使用Django Web应用程序框架构建。 Django最初是为这家...

    rslog

    主模块-运行应用存放数据的容器容器传递给模块来工作InputParser->提取器->验证器-> DataParser->演示者InputHandler 解析输入选项和参数,创建对象以容纳选项和参数,如果选项和参数与规则兼容并传递到下一步,...

    service:服务封装了一个对象,该对象在可以启动或停止的循环中执行一些代码,并查询它是否正在运行

    服务 服务将一个对象封装起来,该对象在可以启动或停止的循环中执行一些代码,并查询其是否正在运行。 安装 Bundler: gem 'service' RubyGems: gem install service ... 下一步是在对象上定义#exe

    中台技术解析之微服务架构下的测试实践

    随着技术的发展,软件开发方法不断演进,测试一直都是不可或缺的一步。作为提升用户体验、保障软件质量的关键环节,软件测试至关重要。特别是面对多样化的测试需求、不断加快的版本迭代速度,如何围绕业务功能需求...

    iuhyiuhkjh908u0980

    前面已经把ant的基本运行环境搭建好了,在接下来的工作中,将一步一步的开始构建我们的项目。选择项目目录结构:一个项目开始的时候,选择一个合适的项目目录结构,是一件很重要的事情,可能你会很习惯由IDE自动创建...

    JAVA上百实例源码以及开源项目源代码

     QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA...

    JAVA上百实例源码以及开源项目

     QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA...

Global site tag (gtag.js) - Google Analytics