Ruby的对象模型

  • Post author:
  • Post category:其他


Ruby中到处都是对象,但除了对象还有其它语言构建,比如类class,模块module,实例变量instance variable等。

对象模型(object model),所有语言构件存在于的其中的系统。对象模型是Ruby的灵魂。

Ruby中class不仅是类型声明语句,更是一个作用域操作符,可以把你带到类的上下文中,让你可以在其中定义方法。这样一来,你便总是可以重新打开已经存在的类并对其动态的修改。这种技术称为打开类(Open Class)技术。

打开类技术存在隐患,可能会无意中覆盖已有的方法,即猴子补丁(Monkeypatch).

[ ].methods 返回实例方法;

Array.instance_methods 返回实例方法;

Array.methods 返回类方法。

Object#instance_variables() 返回实例变量。参数中的false表示非继承来的方法。


一个对象的内部仅仅包含它的实例变量以及一个对自身类的引用。对象的方法并不存在于对象自身,而是存在于对象的类中。在类中,这些方法称为实例方法。

类自身也是一个对象,它有自己的类是Class。类是一个对象,外加一组实例变量,和一个对其超类的引用。Class类是Module类的子类,因此一个类也是一个模块。


类和模块的区别:

一个类不过是一个增强的Module,增加了三个方法——new();allocate()(是new()的支撑方法);superclass().

一个模块基本上就是一组实例方法,而类是一个增加了若干新功能的模块。

希望它在别处被包含(include)时或当成命名空间时,应该选择使用模块;希望它被实例化或者被继承时,应该选择使用类。

require()方法和load()方法很相似,但是目的不同。通过load()可以执行代码,而require()则是用来导入类库的。

任何以大写字母开头的引用,包括类名和模块名,都是常量。



版权声明:本文为u010854460原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。