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

Project1

 找回密码
 注册会员
搜索
楼主: 喵呜喵5
打印 上一主题 下一主题

[已经解决] 类变量相比全局变量有什么优点和缺点?

[复制链接]

Lv2.观梦者

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

贵宾

11
发表于 2013-11-8 07:41:53 | 只看该作者
类变量的用途,比如统计这个类当前存活有多少个对象之类怪怪的功能~

点评

全局变量也可以啊  发表于 2013-11-8 10:26

评分

参与人数 2星屑 +96 收起 理由
熊喵酱 + 66 感谢帮忙
喵呜喵5 + 30 感谢帮忙

查看全部评分

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

使用道具 举报

Lv2.观梦者

梦石
0
星屑
367
在线时间
1292 小时
注册时间
2013-1-12
帖子
3590

贵宾

12
发表于 2013-11-8 08:44:33 | 只看该作者
本帖最后由 76213585 于 2013-11-7 19:44 编辑

可能是空間的差別?
全局變量的話要記住很久
類變量的話會清除

@喵呜喵5
我沒記錯的話是在此class結束時
像是:
RUBY 代码复制
  1. class Panda
  2.   def intialize(string)
  3.      @string = string
  4.      p @string
  5.   end
  6. end#這裡會清掉@string

点评

class何时结束?类变量该如何做实验?  发表于 2013-11-8 12:40
类变量何时会清除?  发表于 2013-11-8 10:25

评分

参与人数 1星屑 +30 收起 理由
喵呜喵5 + 30 感谢帮忙,看起来不会有更多答案了,结贴吧.

查看全部评分


回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21686
在线时间
9420 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

13
 楼主| 发表于 2013-11-8 12:08:02 | 只看该作者
76213585 发表于 2013-11-8 08:44
可能是空間的差別?
全局變量的話要記住很久
類變量的話會清除

@@string 何时会清除?

点评

應該也是在Class結束時 可以直接做個實驗....  发表于 2013-11-8 12:11
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
14
发表于 2013-11-8 12:30:36 | 只看该作者
本帖最后由 无脑之人 于 2013-11-8 12:31 编辑

根据在下的理解,全局变量是整个程序都可能使用,而且不方便通过方法传递的变量,他和常量是有本质区别的【常量理论上是不应该修改的】
比如$game_player储存了几乎所有的玩家位置信息,可以在任何需要判定位置的地方使用
不过滥用全局变量是非常不好的行为,对于这个不想多说
而类变量的适用范围相对小一些,他可以在类里面以及所有类的实例里面使用,也就是说,她是类与实例之间沟通的桥梁,最常用的应该是拿类变量来做默认值
@Shadow
举例:
  1. class Font
  2.   @@shadow=true
  3.   def shadow=(shadow) ; @shadow=shadow ; end
  4.   def shadow ; @shadow ||= @@shadow ; end
  5.   def self.default_shadow=(shadow) ; @@shadow=shadow ; end
  6.   def self.default_shadow ; @@shadow ; end
  7. end
复制代码
这样就实现了控制阴影的默认值的效果【当然VA如何实现的我不清楚,XP我是这么写的反正
值得注意的是,类变量必须定义了初始值才可以使用,见上例   

评分

参与人数 2星屑 +96 收起 理由
熊喵酱 + 66 感谢帮忙
喵呜喵5 + 30 感谢帮忙

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
367
在线时间
1292 小时
注册时间
2013-1-12
帖子
3590

贵宾

15
发表于 2013-11-8 12:45:16 | 只看该作者
本帖最后由 76213585 于 2013-11-7 21:53 编辑
喵呜喵5 发表于 2013-11-7 21:08
@@string 何时会清除?


class結束在class對應的end
像是
  1. class Panda
  2. end
复制代码
中的end就是class的結束
  1. class Panda
  2.   def initialize(string)
  3.      @string = string
  4.      p @string
  5.   end
  6. end
复制代码
的話
def跟第一個end就是判定成一起
而剩下的end就是class結束時  也就是清理的時候

然後做實驗的話就是
  1. class Panda
  2.   def initialize(string)
  3.      @string = string
  4.      p @string
  5.   end
  6. end
  7. p @string
复制代码
就是在class後再試試看是否為nil  是或不是代表什麼乃應該知道


@喵呜喵5  
(我只是個渣.......)
不過我試了一下  的確兩個都是會在class結束後清掉

点评

我问的是类变量@@不是实例变量@啊……  发表于 2013-11-8 12:50
如果end就是结束的话,如何在游戏中让一个类结束?  发表于 2013-11-8 12:49

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21686
在线时间
9420 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

16
 楼主| 发表于 2013-11-8 12:46:38 | 只看该作者
无脑之人 发表于 2013-11-8 12:30
根据在下的理解,全局变量是整个程序都可能使用,而且不方便通过方法传递的变量,他和常量是有本质区别的【 ...

滥用全局变量的缺点是什么呢?类变量使用要赋值调用不方便,如果全局变量的缺点仅仅是重复性比较高的话那么类变量根本就没什么优点了啊……
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21686
在线时间
9420 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

17
 楼主| 发表于 2013-11-8 12:58:58 | 只看该作者
76213585 发表于 2013-11-8 12:45
class結束在class對應的end
像是中的end就是class的結束的話
def跟第一個end就是判定成一起

请问一下实验方式?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
367
在线时间
1292 小时
注册时间
2013-1-12
帖子
3590

贵宾

18
发表于 2013-11-8 13:03:27 | 只看该作者
喵呜喵5 发表于 2013-11-7 21:58
请问一下实验方式?
  1. class Panda
  2.   def initialize(string)
  3.      @string = string
  4.      p @string
  5.   end
  6. end
  7. Panda.new("Panda!!!")
  8. p @string
复制代码
以及
  1. class Panda
  2.   def initialize(string)
  3.      @@string = string
  4.      p @@string
  5.   end
  6. end
  7. Panda.new("Panda!!!")
  8. p @@string
复制代码

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21686
在线时间
9420 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

19
 楼主| 发表于 2013-11-8 13:19:13 | 只看该作者
76213585 发表于 2013-11-8 13:03
以及

class Panda
@@var = 0
def initialize
p @@var += 1
end
end
@a = Panda.new
@b = Panda.new
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
99
在线时间
158 小时
注册时间
2011-7-15
帖子
39
20
发表于 2013-11-8 16:38:19 | 只看该作者
本帖最后由 deeg 于 2013-11-8 16:55 编辑

雖然我不是很懂程式語,但是希望這篇能對喵大有所幫助

函數的副作用
http://zh.wikipedia.org/wiki/%E5 ... F%E4%BD%9C%E7%94%A8

類變數
http://baike.baidu.com/view/2893749.htm

Ruby中全局变量,实例变量,局部变量,类变量,Symbol对比
http://blog.csdn.net/kunshan_shenbin/article/details/7271899

点评

不會,我自己試著找過,也沒看到有特別說優點的文章就是了  发表于 2013-11-8 17:26
谢谢,最后那篇csdn的文章很实用(虽然看完后我还是没找到类变量的显著优点)  发表于 2013-11-8 17:01

评分

参与人数 2星屑 +96 收起 理由
熊喵酱 + 66 感谢帮忙
喵呜喵5 + 30 感谢帮忙

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 15:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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