Metaprogramming(ObjectModel)

在Ruby程序中,除了对象之外,还有类、模块以及实例变量这些语言构件。这 些语言构件存在于其中的系统称为对象模型。在对象模型中,你可以找到诸 如"这个方法来自哪个类"和"当我包含这个模块是会发生什么"此类问题的答案。
ObjectModel
* 注1: class关键字更像是一个作用域操作符而不是类型声明语句,它的确可以 创建一个还不存在的类,不过也可以把这看成是一个副作用。对于class关键 字,其核心任务是把你带到类的上下文中,让你可以在其中定义方法。

  • 注2: 修改已有类的特性时,由于粗心导致bug,像这种鲁莽的修改方式被称为 猴子补丁。不过,如果是正确的运行打开类这种技术,猴子补丁也可以表示为 一个褒义词,会很有用。

  • 注3: 对象是一组实例变量外加一个指向其类的引用。对象的方法并不存在于对象本身,而是存在于对象的类中。在类中,这些方法被称为类的实例方法。 类是一个对象(Class类的一个实例)外加一组实例方法和一个对其超类的引用。 值得注意的是,实例变量存放在对象中,而方法存放在类中,比如

class MyClass
  def my_method
    @v = 1
  end
end

obj = MyClass.new
obj.class              # => MyClass

上面代码结构可表示为: ObjectClass

  • 注4: 一个类只不过是一个增强的Module,它只是在Module基础上增加了三个 方法——new()、allocate()和superclass()而已,结构如下。 ModuleClass

  • 注5: 每个类都有一个祖先链,这个链从自己所属的类开始,向上直到BasicObject结束。其中,Object类包含了Kernel模块,故Kernel方法对所有对象可用。

blogroll

social