`

Ruby self在不同环境的含义

    博客分类:
  • Ruby
阅读更多

Ruby的self在不同的环境中有不同的含义,这点和java的this不同,原因是java实际上只有一种环境--在class的实例方法定义中使用,代表访问这个方法参数自动传进的那个对象。而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义

一、Top Level Context

puts self  

 打印出main,这个代表Object的默认对象main.

二、在class或module的定义中:

在class和module的定义中,self代表这个class或这module对象:

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
S
Nested module S::M
S::M
Back in the outer level of S
S
>Exit code: 0

 三、在实例的方法定义中:

这点和java的this代表的东东一样:程序自动传递的调用这个方法的对象

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是拥有这个方法的对象:

# 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代表这个类对象:

# 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
S
>Exit code: 0

 从上面的例子我们可以看出不管是ruby的self还是java的this都表示在当前的环境下你可以访问的当前的或者默认的对象。

以上来自http://rubylearning.com/satishtalim/ruby_self.html 的总结

6
2
分享到:
评论
3 楼 rongge2 2010-04-27  
谢谢,非常不错 ,尤其是对 像我这样的初学者解惑不少
2 楼 orcl_zhang 2009-07-25  
真的很不错。
任何东东都是对象,按照这个思路来理解,self的用法就会比较明了。
受益了
1 楼 samsam 2008-12-25  
好文,总结的很好

相关推荐

Global site tag (gtag.js) - Google Analytics