rubyonrails:ruby 模块

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

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

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

::操作符告诉 Ruby 解释器在哪里找常数值(可以想像,Math外其它模块用PI表示其它些东西).如果我们想省掉 :: 直接个模块思路方法和常数,我们可以用 :
ruby> Math
Object
ruby> sqrt(2)
1.41421
ruby> PI
3.14159

模块使用方法是糅和(mixin).某些OO语言,包括C,允许多重继承(multiple inheritance),即从多个父类里继承. 现实世界里个多重继承例子是闹钟:你可以想像闹钟属于钟类同是属于带蜂音器事物类.
Ruby并未特意实现真正多重继承,但糅和技术是很好替代.记得模块无法实体化或子类化;但如果我们在类定义里个思路方法,
思路方法便实际上已加入,或"糅合"进这个类.
糅合可以视为种寻求切我们希望得到特定属性思路方法.举个例子,如果个类有个 each 思路方法,把标准库里Enumerable模块糅合进来就自然地赋予我们 sort 和 find 两个思路方法.
模块使用令到我们获得多重继承基本功能却可通过简单树结构表述类关系,同时也可观地简化了语言实现(Java设计者也做了个类似选择).
Tags:  ruby是什么 ruby教程 ruby是什么意思 rubyonrails

延伸阅读

最新评论

发表评论