而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义 一、Top Level Context Ruby代码 puts self 打印出main,这个代表Object的默认对象main. 二、在class或module的定义中: 在class和module的定义中,self代表这个class或这module对象: Ruby代码 class S puts 'Just started class S' puts self module M puts 'Nested module S::M' puts self end puts 'Back in the outer level of S' puts self end 输出结果: 写道 >ruby self1.rb Just started class S Nested module S::M S::M Back in the outer level of S >Exit code: 0 三、在实例的方法定义中: 这点和java的this代表的东东一样:程序自动传递的调用这个方法的对象 Java代码 class S def m puts 'Class S method m:' puts self end end s = S.new s.m 运行结果: 写道 >ruby self2.rb Class S method m: #S:0x2835908> >Exit code: 0 四、在单例方法或者类方法中: 单例方法是针对一个对象添加的方法,只有这个对象拥有和访问这个方法,这时候self是拥有这个方法的对象: Ruby代码 # self3.rb obj = Object.new def obj.show print 'I am an object: ' puts "here's self inside a singleton method of mine:" puts self end obj.show print 'And inspecting obj from outside, ' puts "to be sure it's the same object:" puts obj 运行结果: 写道 ruby self3.rb I am an object: here's self inside a singleton method of mine: #Object:0x2835688> And inspecting obj from outside, to be sure it's the same object: #Object:0x2835688> >Exit code: 0 在类方法中self代表这个类对象: Ruby代码 # self4.rb class S def S.x puts "Class method of class S" puts self end end S.x 运行结果: 写道 >ruby self4.rb Class method of class S >Exit code: 0 从上面的例子我们可以看出不管是ruby的self还是java的this都表示在当前的环境下你可以访问的当前的或者默认的对象。