Project1

标题: 我一直搞不懂 定义实例变量 [打印本页]

作者: z2z4    时间: 2013-7-20 15:01
标题: 我一直搞不懂 定义实例变量
attr_reader   :common_event_id
attr_accessor :fade_type      

这2个 有什么区别


还有 定义实例变量  和非 定义实例变量  又是干嘛的


还有 发现 @这个 在没 定义实例变量 一样能用

  $这个全局变量 好像 随便 什么字母 就可以 调用
作者: 晴兰    时间: 2013-7-20 15:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2013-7-20 16:45
attr_accessor :abc 与
def abc
return @abc
end
差不多吧?
作者: Password    时间: 2013-7-20 21:46
本帖最后由 Password 于 2013-7-20 21:48 编辑

attr_reader   :  read only # 只能读取,不能进行修改
attr_writer    : write only #只能进行修改,不能读取,不过貌似不常用
attr_accessor : both read and write #既能读取,也能进行修改

关于accessor和reader引发的不同,可以参见这帖:http://rpg.blue/thread-320728-1-1.html
作者: DeathKing    时间: 2013-7-20 22:04
简单来说,因为实例变量只能在类内部访问到(面向对象的程序设计哲学)。然后为了操纵到这些实例变量,就需要通过类提供的方法来折衷地实现。
  1. class A
  2.   def a=(v)
  3.     @a = v
  4.   end
  5. end

  6. o = A.new
  7. o.a = 1 # 可以通过a=这个方法来设置实例变量@a
  8. o.a # NameError, A中没有定义a方法
复制代码
但是,为每一个实例变量都这样弄太麻烦了,于是就提供了attr_系列方法。他帮你创建操纵这些实例变量的方法。

这样一说。你再看上面的帖子应该就能明白了。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1