Ruby模块相关概念解析

开发 开发工具
Ruby模块对于一个初学Ruby的朋友来说,是一个比较难以了解的知识。希望通过这篇文章的介绍,大家可以初步掌握Ruby模块的知识。

我们在学习Ruby语言的时候,可以充分的了解到其中的含义。在这篇文章中,我们将会了解到有关Ruby模块的相关知识接受,方便大家的理解。#t#

Ruby模块非常类似类,除了:

模块不可以有实体
模块不可以有子类
模块由module...end定义.

实际上...Ruby模块的'模块类'是'类的类'这个类的父类.搞懂了吗?不懂?让我们继续看下去吧.
模块有两种用法.其一是将相近的方法和实体放在一个相对集中的域里.Ruby标准包里的Math模块就扮演着这一角色:

  1. ruby> Math.sqrt(2)   
  2. 1.41421   
  3. ruby> Math::PI   
  4. 3.14159   

 

::操作符告诉 Ruby 解释器在哪里找常数的值(可以想像,Math外的其它模块用PI表示其它的一些东西).如果我们想省掉 :: 直接调用一个模块的方法和常数,我们可以用 include:

  1. ruby> include Math   
  2. Object   
  3. ruby> sqrt(2)   
  4. 1.41421   
  5. ruby> PI   
  6. 3.14159   

 

Ruby模块的另一用法是糅和(mixin).某些OO语言,包括C++,允许多重继承(multiple inheritance),即从多个的父类里继承. 现实世界里一个多重继承的例子是闹钟:你可以想像闹钟属于钟类同是属于带蜂音器的事物类.

Ruby并未特意实现真正的多重继承,但糅和技术是一很好的替代.记得模块无法实体化或子类化;但如果我们在类定义里include一个方法,

它的方法便实际上已加入,或"糅合"进这个类.

糅合可以视为一种寻求一切我们希望得到的特定属性的方法.举个例子,如果一个类有个 each 方法,把标准库里的Enumerable模块糅合进来就自然地赋予我们 sort 和 find 两个方法.

Ruby模块的使用令到我们获得多重继承的基本功能却可通过简单的树结构表述类关系,同时也可观地简化了语言的实现(Java的设计者也做了一个类似的选择).

责任编辑:曹凯 来源: jb51.net
相关推荐

2009-12-18 15:56:05

Ruby特殊语法

2009-12-16 14:33:21

Ruby哈希表

2009-12-29 09:54:27

WPF文字布局

2010-01-06 18:21:24

2009-12-28 16:20:50

WPF内嵌样式

2009-12-28 15:18:29

WPF控件模型

2009-12-23 15:27:34

WPF图形系统

2010-02-02 16:15:38

C++变量声明

2009-12-23 17:18:45

WPF Attache

2009-12-16 14:51:26

Ruby nil

2010-02-01 11:01:30

C++静态构造函数

2010-01-19 15:08:18

VB.NET对象成员

2009-12-17 11:27:31

Ruby时间方法

2009-12-14 18:14:27

Ruby DSL

2009-12-18 15:24:52

2009-12-16 10:57:16

Ruby文件锁

2009-12-16 16:24:00

Ruby on Rai

2009-12-14 16:26:40

Ruby复制文件

2010-04-08 15:33:05

无线网络桥接

2009-12-18 17:20:00

Ruby核心类
点赞
收藏

51CTO技术栈公众号