免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1883 | 回复: 0
打印 上一主题 下一主题

A.5 例子—辨析——说明 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-15 11:58 |只看该作者 |倒序浏览
A.5 例子—辨析——说明


请研究下列程序,你会有非常意外的收获:class A
a = 111
def aa
a
end
def aa=(aa)
a = aa
end
#aa
#aa(1)
end
b = A.new
#b.aa
b.aa = 1
#puts b.aa

class B
@a = 111
def a
@a
end
def a=(bb)
@a = bb
end
def aa
@a
end
def aaa
puts @a
end
#aaa
puts @a
end
b=B.new
puts b.a
b.a=1
puts b.a
b.a=2
puts b.a
puts b.aa
puts b.aaa我会给出详细说明的!


class A初解析
class A
a= 111 #局部变量,范围在class A中
def aa
a #class A的局部变量a,在此已无效,一但使用即有NameError错
end
def aa=(aa)
a = aa #如 a = 1,也就意味着此方法中又有了个a的同名变量,作用域在此方法中
puts a end
#aa 使用就有NameError
#aa(1) 没有此方法,
#aa=(1) 或 aa = 1 或 aa=1 都正确
end


class B初解析
class B
@a = 111
def a
@a
end
def a=(bb)
@a = bb
end
def aa
@a
end
def aaa
puts @a
end
#aaa NameError错
#B.new.aaa 实例变量要由实例来调用,此时@a=nil,因为没赋值
end
b = B.new
puts b.a #输出nil
b.a=1 #赋值1
puts b.a #输出1
puts b.aaa #输出1,因为是实例并没改变
c = B.new
puts c.aa #输出nil
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP