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

Project1

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

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

[复制链接]

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

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

开拓者短篇九导演组冠军

跳转到指定楼层
1
发表于 2013-11-7 17:32:08 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
对于类变量的使用目前一知半解所以想问问,相比全局变量,类变量有什么优点?又有什么缺点?啊,使用前必须预先定义那个不算……

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

23
发表于 2013-11-9 12:50:56 | 只看该作者
本帖最后由 余烬之中 于 2013-11-9 13:07 编辑

类方法可以访问类变量,不可以访问实例变量

类变量提供类的各实例之间的数据共享,同时对外隐藏

个人见解
——————————
就像C++里的静态成员 @喵呜喵5

点评

那类变量不就是个作用范围比较狭窄的全局变量了?  发表于 2013-11-9 12:54
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
22
发表于 2013-11-9 12:34:06 | 只看该作者
反正尽量少用全局变量【不要问为什么
类变量用处本来就不大,我反正是除了默认值之外没用过它【一个默认值就一个全局变量的话不嫌蛋疼?
子类和模块共享类变量这个涨姿势了,回去看看有什么应用

点评

我是在写菜单脚本时仿照默认脚本实现自动移动光标到上次关闭时的位置这一功能时使用到了类变量,原生的脚本好像也只有这里有用到类变量?  发表于 2013-11-9 12:52
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

21
发表于 2013-11-9 04:29:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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
回复 支持 反对

使用道具 举报

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

开拓者短篇九导演组冠军

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

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

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

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

开拓者短篇九导演组冠军

16
 楼主| 发表于 2013-11-8 12:46:38 | 只看该作者
无脑之人 发表于 2013-11-8 12: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結束後清掉

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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