设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: kuangding66
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
帖子
31
11
 楼主| 发表于 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的事了?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3570
在线时间
3064 小时
注册时间
2011-11-17
帖子
980
12
发表于 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

复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
帖子
31
13
 楼主| 发表于 2013-8-18 21:59:05 | 只看该作者
yagami 发表于 2013-8-18 20:10
给你写了很通俗的一个例子

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

使用道具 举报

Lv1.梦旅人

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-29 16:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表