ruby中self的一些理解

看了一个javaeye的一个关于这个的讨论,说的不是很清楚,自己测试了一下
class T1  
  attr_reader :v1 
  @v1 = 'abc'  
  @v1 = 'bbb'
  def initialize(v1)
  	@v1 = v1+'dfd'
  	@v1 = self.get_v1
  	@v1 = get_v1
  end
  def get_v1   
    return @v1+'lllllll'  
  end  
     
  def self.get_v1   
    return @v1+'kkkkk'  
  end  
  @v1 = 'ccc'
end  
  
i1 = T1.new('goo') 
puts i1.get_v1  #返回空,而不是'abc'   
puts T1.get_v1  #这个才是返回'abc' 
puts i1.v1

返回结果:
PS F:\ror\iStar\SToDoOL> ruby mytest\cl1.rb
goodfdlllllllllllllllllllll
ccckkkkk
goodfdllllllllllllll
很有意思,这说明了如下几点:
1)不在方法里的代码如@v1='ccc'之类的,与i1无关,就是说与类实例无关,他们等于T1这个‘类实例’的initialize。且与位置无关
2)def self.get_v1 与T1.get_v1对应,与T1.new出的所有实例无关,如果在类方法中调用self.get_v1方法,与直接调用get_v1一样,指向def get_v1方法
可见,self与static不同,static是所有的对象都调用同一个函数,而self是类实例才能调用

你可能感兴趣的:(F#,Ruby)