类和对象
类是一个对象(class 类的一个实例)外加一组实例方法和一个对其超类的引用。Class 类是 Module 类的子类,因此一个类也是一个模块。
对象是一组实例变量外加一个指向其类的引用。对象的方法存在于对象的类中,得以共享。在类中,这些方法被称为类的实例方法。对象的实例变量存在与对象中,不能共享。
不管处在 Ruby 程序的哪个位置,总是存在一个当前对象 self 和当前类(模块)。
当前对象 self
每一行代码都会在一个对象中被执行,这个对象就是当前对象。当前对象可以用 self来表示。在给定时刻,只有一个对象能充当当前对象。
一、在类定义中,当前对象 self 就是正在定义的类
二、当调用一个方法时,接收者就成为 self
所有的实例变量都是 self 的实例变量,任何没有指明接收者的方法都在 self 上调用。
如下,obj
为接受者,成为 self。因此,@v
成为 obj
的实例变量,my_method
和 my_call
没有指明接收者,在 obj
上调用。
指明接收者的方法,在被指明的接受者上调用
三、 当遇见 instance_eval 和 class_eval 时同理
当前类
所有使用 def
定义的方法将成为当前类的实例方法。在类定义中,当前类就是 self ,即为正在定义的类。因此,在类定义中,当前类 == 当前对象 == self。
笔记来源
Ruby元编程(第2版)