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是类实例才能调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值