Project1

标题: 小白问题,求解类变量 [打印本页]

作者: makinoa    时间: 2011-11-1 23:19
标题: 小白问题,求解类变量
也就是以@@开头的变量,这个变量有什么用,求详尽解答dsu_plus_rewardpost_czw
作者: 后知后觉    时间: 2011-11-2 01:51
$ 开头的全局变量是程序中任何地方都能读取写入的变量
而某个类里的 类变量 @@ 可以理解为 某个类里的全局变量
  1. class Abc
  2.   @@h = 0
  3.   def initialize(h = @@h)
  4.     @@h = h
  5.   end
  6.   def h
  7.     return @@h
  8.   end
  9.   def h=(h)
  10.     @@h = h
  11.   end
  12. end
  13. a = Abc.new
  14. p a.h # 显示 0
  15. b = Abc.new(5)
  16. p a.h  # 显示 5
  17. p b.h  # 显示 5
  18. a.h = 3
  19. b.h = 7
  20. p a.h  # 显示 7
  21. p b.h  # 显示 7
  22. exit
复制代码

作者: 禾西    时间: 2011-11-2 12:58
類變量可以認為是全局變量的一種= =。只不過應用范圍狹窄一點而已。它被限定在屬于同一個類的多個實例中使用,不爽的話,用全局變量代替也完全地沒問題。
作者: cinderelmini    时间: 2011-11-2 20:39
没理解错的话~
类变量就是在同一个class父类下的所有class都可以用的变量吧??
其实为了减少错误或者为了这个变量的方便使用,
可以用全局变量代替的~
不过全局变量经常会出现在使用前未赋值的错误~~
唉~斟酌着用吧~
作者: eve592370698    时间: 2011-11-7 22:36
后知后觉 发表于 2011-11-2 01:51
$ 开头的全局变量是程序中任何地方都能读取写入的变量
而某个类里的 类变量 @@ 可以理解为 某个类里的全局 ...

您想说的是以@开头的变量吧?
这个变量是在类中使用的只局限于这个名字的类中不但要求类名字相同而且父类也得相同!,不能再子类以及父类使用。
例如
  1. class Hou知后觉

  2. end
复制代码
  1. class Hou知后觉 < Liu6大人
  2. end
复制代码
这就不是同样的类,不能合并,该类变量两个类必须分别赋值才行。
作者: 后知后觉    时间: 2011-11-7 22:57
本帖最后由 后知后觉 于 2011-11-7 23:02 编辑
eve592370698 发表于 2011-11-7 22:36
您想说的是以@开头的变量吧?
这个变量是在类中使用的只局限于这个名字的类中不但要求类名字相同而且父类 ...


@ 开头的变量和 @@ 开头的变量是两种类型的变量.

  1. class Abc
  2.   @@a = 111
  3.   @b = 222
  4.   def initialize
  5.     @@a = 333
  6.     @b = 444
  7.   end
  8.   def self.b
  9.     p @b
  10.   end
  11. end
  12. class  Bcd < Abc
  13.   p @@a # => 111
  14.   p @b  # => nil
  15.   def initialize
  16.     super
  17.     p @@a # => 333
  18.     p @b  # => 444
  19.   end
  20. end
  21. Bcd.new
  22. Abc.b # => 222
  23. exit
复制代码

作者: 小白玩家    时间: 2011-11-7 23:15
本帖最后由 小白玩家 于 2011-11-7 23:15 编辑

有人看得懂吗,我觉得好复杂,总结下等于$为全局变量,@@是类的变量,@和@@相比又限制更多。。。。
作者: 亿万星辰    时间: 2011-11-8 07:24
$是全局公用,@@是某个类的所有对象公用,这么理解会不会简单一些?
  1. class TestClass
  2.   @@total_size = 0
  3.   def initialize
  4.     # 通过类变量可以得知当前创建的是第几个该类的对象
  5.     @id = @@total_size
  6.     @@total_size += 1
  7.   end
  8. end
复制代码

作者: 小白玩家    时间: 2011-11-8 13:26
Ruby的变量有一定的规则,以$开头的一定是全局变量,以@开头的都是实例变量,而以@@开头的是类变量。以上是我能找到的标准答案!!
作者: gamedev0001    时间: 2011-11-8 14:32
提示: 作者被禁止或删除 内容自动屏蔽




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