看了一个javaeye的一个关于这个的讨论,说的不是很清楚,自己测试了一下
返回结果:
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是类实例才能调用
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是类实例才能调用