Ruby的self在使用时需要多加小心,在不同的地方使用,效果是不一样的。
Top level context
1.9.3p362 :001 > p self
main
=> main
这里,在irb里直接打出self,得到默认对象main。
在类中
1.9.3p362 :001 > class Person
1.9.3p362 :002?> p self
1.9.3p362 :003?> end
Person
=> Person
在‘类方法’中
1.9.3p362 :001 > class Person
1.9.3p362 :002?> def self.method
1.9.3p362 :003?> p self
1.9.3p362 :004?> end
1.9.3p362 :005?> end
=> nil
1.9.3p362 :006 > Person.method
Person
=> Person 此时得到的是Person这个Class。需要注意的是,这里self.method不需Person实例化,直接调用。
在类的实例方法中
1.9.3p362 :001 > class Person
1.9.3p362 :002?> def method
1.9.3p362 :003?> p self
1.9.3p362 :004?> end
1.9.3p362 :005?> end
=> nil
1.9.3p362 :006 > Person.new.method
#<Person:0x00000001a19658>
=> #<Person:0x00000001a19658> 此时得到的是实例化后的Peroson。
Kungs
01 October 2012