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

Project1

 找回密码
 注册会员
搜索
查看: 1919|回复: 9
打印 上一主题 下一主题

[已经解决] 小白问题,求解类变量

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2011-10-27
帖子
19
跳转到指定楼层
1
发表于 2011-11-1 23:19:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
也就是以@@开头的变量,这个变量有什么用,求详尽解答

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

2
发表于 2011-11-2 01:51:40 | 只看该作者
$ 开头的全局变量是程序中任何地方都能读取写入的变量
而某个类里的 类变量 @@ 可以理解为 某个类里的全局变量
  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
复制代码











你知道得太多了

回复

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1030
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

3
发表于 2011-11-2 12:58:51 | 只看该作者
類變量可以認為是全局變量的一種= =。只不過應用范圍狹窄一點而已。它被限定在屬于同一個類的多個實例中使用,不爽的話,用全局變量代替也完全地沒問題。

评分

参与人数 1星屑 +200 梦石 +2 收起 理由
各种压力的猫君 + 200 + 2 手动认可

查看全部评分

不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

4
发表于 2011-11-2 20:39:50 | 只看该作者
没理解错的话~
类变量就是在同一个class父类下的所有class都可以用的变量吧??
其实为了减少错误或者为了这个变量的方便使用,
可以用全局变量代替的~
不过全局变量经常会出现在使用前未赋值的错误~~
唉~斟酌着用吧~
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
帖子
6474
5
发表于 2011-11-7 22:36:21 | 只看该作者
后知后觉 发表于 2011-11-2 01:51
$ 开头的全局变量是程序中任何地方都能读取写入的变量
而某个类里的 类变量 @@ 可以理解为 某个类里的全局 ...

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

  2. end
复制代码
  1. class Hou知后觉 < Liu6大人
  2. end
复制代码
这就不是同样的类,不能合并,该类变量两个类必须分别赋值才行。
潜水,专心忙活三次元工作了……
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

6
发表于 2011-11-7 22:57:53 | 只看该作者
本帖最后由 后知后觉 于 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
复制代码











你知道得太多了

回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
448
在线时间
628 小时
注册时间
2011-9-27
帖子
3996
7
发表于 2011-11-7 23:15:41 | 只看该作者
本帖最后由 小白玩家 于 2011-11-7 23:15 编辑

有人看得懂吗,我觉得好复杂,总结下等于$为全局变量,@@是类的变量,@和@@相比又限制更多。。。。
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

8
发表于 2011-11-8 07:24:27 | 只看该作者
$是全局公用,@@是某个类的所有对象公用,这么理解会不会简单一些?
  1. class TestClass
  2.   @@total_size = 0
  3.   def initialize
  4.     # 通过类变量可以得知当前创建的是第几个该类的对象
  5.     @id = @@total_size
  6.     @@total_size += 1
  7.   end
  8. end
复制代码

评分

参与人数 1星屑 +200 梦石 +2 收起 理由
各种压力的猫君 + 200 + 2 手动认可

查看全部评分

我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
448
在线时间
628 小时
注册时间
2011-9-27
帖子
3996
9
发表于 2011-11-8 13:26:10 | 只看该作者
Ruby的变量有一定的规则,以$开头的一定是全局变量,以@开头的都是实例变量,而以@@开头的是类变量。以上是我能找到的标准答案!!
回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
10
发表于 2011-11-8 14:32:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 02:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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