虽然看官方文档,可以弄清这几个的区别, 但实际在开发中,又不知道如何使用,该怎么用才比较合适。
很难‘灵活’应用起来啊
哪位能给些更多的资料或者例子,可以说明更清楚下的
你能够把代码思维套到现实世界中,你玩 ruby 就入门了。。。
人是一个类 人的数量,可以理解为类的变量(不过这是类似方法了,先别在意) 你是人类中的一个,你就是实例,你的钱包里的钱,就是实例变量
而全局呢,就好比太阳光,每天日落日出,大家都知道它
如何用呢,你就放到现实中,比如钱,你指的是你钱包里的钱,还是集体的钱 如果是你钱包里的钱,那就是实例后的变量。毕竟你需要 User.find_by_card(你的身份证),针对你的属性 如果你要想知道全人类有多少钱,User.total_money
而全局,你就$mony,咋样都能获得这个值。。。
全局变量,这个最好理解了,能被所有的类或者任何实例访问到
实例变量,这个也好理解,就是某个类的实例对象的变量,仅限于该对象能被访问,这个也是开发中最经常用到的,频率最高的。
类变量 跟 类实例变量 这个是我现在容易混乱的。 我的理解主要是类继承上的区别 类变量 能被所有该类的子类还有实例访问到 类实例变量 只能被该类访问
不知理解是否有错?
class A
@a=1
@@a=2
#类变量与类的实例变量类方法都可以访问
def self.class_method
p @a #=> 1
p @@a #=> 2
end
#类变量可以从实例方法访问, 类的实例变量不能
def instance_method
p @a #=> nil
p @@a #=> 2
end
end
#类变量子类可见,但类的实例变量子类不可见
class B < A
p @a #=> nil
p @@a #=> 2
end
A.class_method
A.new.instance_method
实例变量是只属于这个实例的,类本身也是一个实例,所以类实例变量只能他自己访问,子类无法继承和访问。 类变量不是特别清楚,但我的理解是它和全局变量类似,只不过全局变量的作用范围是全局,而类变量的作用范围只是在类本身。
这么说吧,眼睛对于人这个系统来说,所有人都有眼睛,所以它就是全局的,男性器官(有点邪恶,想不出别的区别了)虽然也是人的一部分,但是只有男人这个类才有,女性这个类就没有,所以它就是类变量,然后男性器官具体到不同的男人是不一样的,所以每个具体的男人而言又有实例变量。这三个是对不同的范围控制而言的,更深入的去说就是数据存储地方不一样,堆栈之分(不好再讲,再讲就要翻书了)
我一直有个疑问 rails 的 controller 里是用的实例变量传值到 view 的吧 那在启用 thread_safe! 使用多线程运行的时候 不会串吗?
那么什么是类的类实例变量呢?类的类实例变量是在类的类方法中或方法外边(不能在实例方法中,那是类的实例变量)以@开头定义的变量,这样定义的变量值属于类对象本身,不能够被子类继承。类对象这个说法可能有些让人疑惑,其实 Ruby 中的一起都是对象,我们定义的类和 Ruby 的内置类本身就是元类的对象。因此如果要定义需要和子类共享的类全局数据,使用类变量;但是如果要定义仅供类本身使用的类全局数据可以使用类实例变量。还有一点需要注意的是,和类变量不同的是类实例变量不要求访问前必须赋值,不赋值它的值就是 nil。