seft
是Ruby语言的保留关键词,它始终保指向某一个object
,但是它实际引用的对象却常常根据context的不同而变化。
当方法被调用而没有指明调用者,Ruby会将调用信息发送给self
关键字所引用的对象。由于省略掉指明调用者而直接调用方法的情况非常普遍,所以弄清楚self关键字在当前所引用的对象是非常重要的。
self
最开始总是指向一个main
实例,main
是Object class
的一个对象,由Ruby运行时自动创建。main
是Ruby程序top-level
的命名空间。
在定义一个新的class
时,self
指向class
本身
在定义单例方法时,self
同样指向class
本身
定义实例方法时,self
指向当前class
的一个实例。
定义module
时,self
指向mudule
自身
当在class
定义中include module
时,self
指向引入module
的那一个class
的实例
当一个方法直接调用未显式指定调用者时,就相当于在self上调用。如下例Person#full_name
中,直接调用了Person#first_name
和 Person#last_name
,这时self
就指向当前调用full_name
的实例。
Ruby程序员喜欢利用这点,在编写代码时可以省时省力。