服务器之家

服务器之家 > 正文

ruby 模块

时间:2020-04-09 14:24     来源/作者:脚本之家

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

模块不可以有实体

模块不可以有子类

模块由module...end定义.

实际上...模块的'模块类'是'类的类'这个类的父类.搞懂了吗?不懂?让我们继续看下去吧.

模块有两种用法.其一是将相近的方法和实体放在一个相对集中的域里.Ruby标准包里的Math模块就扮演着这一角色:

ruby>Math.sqrt(2)

1.41421

ruby>Math::PI

3.14159

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

ruby>includeMath

Object

ruby>sqrt(2)

1.41421

ruby>PI

3.14159

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

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

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

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

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

标签:

相关文章

热门资讯

沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部