ruby中的模块

ruby中的模块

我看了一些书,知道ruby的模块功能挺新的,但是觉得太乱
其中有几个问题
一、到底可以在模块中定义什么东西?方法、常量、类、嵌套模块。变量。
二、模块分不同用途时的定一个是不同,如作为命名空间使用的模块和作为Max-in的模块的方法定义是不同的。
有没有更具体详尽的语法参考。
第一个问题你自己答了
第二个问题,格式怎么会不一样呢?
我想你说的是模块作为命名空间使用的时候里面定义的都是类方法既 模块名/类名 . 方法名
而模块作为mix-in使用时更多的是定义普通的实例方法
xavier正解,是LZ理解有问题
ruby the way中说:
引用:
模块和混插


来自类祖先的许多内建方法都是有利用的。要特别注意的是Kernel内的方法被混插到了Object超类中;因为Object是普遍存在的,所以从Kernel中添加给它的方法当然也是普遍存在的。这些方法形成Ruby非常重要的部分。

术语模块和混插(mixin)几乎是同义词。模块是方法和常量的集合,用于扩展Ruby程序。它也可被简单地用于名字空间的管理,但是模块大多数的普通用法是它对类的混合插入特征(使用include)。在这种情况下,它被用做一个混插(mixin,这个术语借用于Python,有时候被写成mix-in,但我写成一个单独的单词)。

为名字空间管理而使用模块的一个例子是经常使用的Math模块。例如,要使用pi的定义,必须包括Math模块;你要以像简单地使用常量那样使用Math::PI。

混插(mixin)提供了获取多重继承优点而不处理所有难点的一种途径。它可以被认为是多重继承的一个有限制的形式,但是语言的创始者Matz称它为"带实现共享的单继承"。

注意,include附加(模块的)名字空间特征给当前作用域。extend附加模块的方法给一个对象。在include内,模块的方法变成可用的实例方法;在extend内,它们变成可用的类方法。

我们应该提一下,load和require不是真正与模块有联系,而是指非模块的Ruby和二进制源(静态的或动态地被加载)。Load操作本质上是读一个文件并将它插入到源文件的当前位置,以便它的定义在那个位置是可用的。Require操作与load类似,但是如果它已经加载了一个文件,它就不会再次加载它。