新手问题 类变量,类实例变量,全局变量 疑惑

luffycn · 2014年11月13日 · 最后由 Mark24 回复于 2020年01月14日 · 5910 次阅读

虽然看官方文档,可以弄清这几个的区别, 但实际在开发中,又不知道如何使用,该怎么用才比较合适。

很难 ‘灵活’ 应用起来啊

哪位能给些更多的资料或者例子,可以说明更清楚下的

从实例变量开始用,因为这个名字空间小,不够再往上。

你能够把代码思维套到现实世界中,你玩 ruby 就入门了。。。

人是一个类 人的数量,可以理解为类的变量(不过这是类似方法了,先别在意)你是人类中的一个,你就是实例,你的钱包里的钱,就是实例变量

而全局呢,就好比太阳光,每天日落日出,大家都知道它

如何用呢,你就放到现实中,比如钱,你指的是你钱包里的钱,还是集体的钱 如果是你钱包里的钱,那就是实例后的变量。毕竟你需要 User.find_by_card(你的身份证),针对你的属性 如果你要想知道全人类有多少钱,User.total_money

而全局,你就 $mony ,咋样都能获得这个值。。。

全局变量,这个最好理解了,能被所有的类或者任何实例访问到

实例变量,这个也好理解,就是某个类的实例对象的变量,仅限于该对象能被访问,这个也是开发中最经常用到的,频率最高的。

类变量 跟 类实例变量 这个是我现在容易混乱的。 我的理解主要是类继承上的区别 类变量 能被所有该类的子类还有实例访问到 类实例变量 只能被该类访问

不知理解是否有错?

实例变量是只属于这个实例的,类本身也是一个实例,所以类实例变量只能他自己访问,子类无法继承和访问。 类变量不是特别清楚,但我的理解是它和全局变量类似,只不过全局变量的作用范围是全局,而类变量的作用范围只是在类本身。

这么说吧,眼睛对于人这个系统来说,所有人都有眼睛,所以它就是全局的,男性器官(有点邪恶,想不出别的区别了)虽然也是人的一部分,但是只有男人这个类才有,女性这个类就没有,所以它就是类变量,然后男性器官具体到不同的男人是不一样的,所以每个具体的男人而言又有实例变量。这三个是对不同的范围控制而言的,更深入的去说就是数据存储地方不一样,堆栈之分(不好再讲,再讲就要翻书了)

我一直有个疑问 rails 的 controller 里是用的实例变量传值到 view 的吧 那在启用 thread_safe! 使用多线程运行的时候 不会串吗?

#2 楼 @badboy 纠结了一整天的东西,大神一句话就让我懂了……

#5 楼 @wp2123 类变量作用范围是所有的类 (所有继承自 Object 类)

10楼 已删除

那么什么是类的类实例变量呢?类的类实例变量是在类的类方法中或方法外边(不能在实例方法中,那是类的实例变量)以 @ 开头定义的变量,这样定义的变量值属于类对象本身,不能够被子类继承。类对象这个说法可能有些让人疑惑,其实 Ruby 中的一起都是对象,我们定义的类和 Ruby 的内置类本身就是元类的对象。因此如果要定义需要和子类共享的类全局数据,使用类变量;但是如果要定义仅供类本身使用的类全局数据可以使用类实例变量。还有一点需要注意的是,和类变量不同的是类实例变量不要求访问前必须赋值,不赋值它的值就是 nil 。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册