楼主: kuangding66

[已经解决] 脚本基础问题 求各位前辈指点QAQ!

[复制链接]
梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
回帖
26
 楼主| 发表于 2013-8-18 19:38:44 | 显示全部楼层
clear仔 发表于 2013-8-17 09:49
给个例子:
class A
attr_accessor:b#定义实例变量

所以说,变量c和d中@a之所以为nil是因为定义实例变量的时候只写了attr_accessor:b而没有attr_accessor:a吗?
虽然初始化中给@a的值为1,但是因为之前没有attr_accessor:a所以之后生成新实例的时候就没有@a的事了?
回复

使用道具 举报

梦石
0
星屑
3703
在线时间
3081 小时
注册时间
2011-11-17
回帖
943
发表于 2013-8-18 20:10:20 | 显示全部楼层
给你写了很通俗的一个例子

  1. class A
  2. attr_reader :aa
  3. attr_accessor :bb   
  4. def initialize
  5.    @aa="aa"
  6.    @bb="bb"
  7.    @cc=1
  8. end

  9. def getcc
  10.    return @cc
  11. end

  12. def setcc(x)
  13.   @cc=x
  14. end

  15. def setaa(x)
  16.   @aa=x
  17. end
  18. end


  19. a=A.new
  20. p a.aa ###attr_accessor可以直接访问
  21. p a.bb###attr_reader 可以直接访问
  22. p a.getcc##没标识attr_ 所以不能直接访问 通过成员函数访问
  23. a.bb="bbb"###attr_accessor所以可以直接赋值
  24. a.setaa("aaa")###attr_reader 只能访问不能更改 所以通过成员函数修改
  25. a.setcc(10)###没标识attr_ 所以不能直接修改 通过成员函数修改
  26. p a.aa
  27. p a.bb
  28. p a.getcc

  29. #######以下都不合法
  30. a.aa="aaa"
  31. p a.cc
  32. a.cc=10

复制代码
回复

使用道具 举报

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
回帖
26
 楼主| 发表于 2013-8-18 21:59:05 | 显示全部楼层
yagami 发表于 2013-8-18 20:10
给你写了很通俗的一个例子

{:2_264:}太感谢啦!!!
这个例子太棒啦非常感谢!!!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
141 小时
注册时间
2013-8-6
回帖
114
发表于 2013-8-19 06:14:21 | 显示全部楼层
要搞清楚accessor, reader 和writer的区别。accessor同时拥有reader和writer两个的功能。即方法化实例变量,同时允许对该变量的获取和修改。
另外为何要方法化? 很简单。在本类的实例方法中你可以直接调用和修改实例变量,但是在本类外(其他类)调用某一类的实例的时候只能使用方法来调用。如果你直接在类A中修改类B中的实例变量@b = 5, 系统提示该变量不存在。因此你要在A中调用B类的对象并修改其实例时只能先用accessor/reader/writer方法化然后再用类方法调用:B.b = 5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部