局部变量,实例变量,全局变量和类变量之间有什么区别?

时间:2012-01-12 18:37:50

标签: ruby-on-rails ruby class variables instance

我只是在学习Ruby,并且有一个非常初学的问题。这四种变量之间的差异主要只是范围。那么局部变量只能在当前块中使用,当前实例中的实例变量,每个范围内的全局变量以及最后的当前类中的类变量?非常感谢!

3 个答案:

答案 0 :(得分:0)

你做对了。差异只是范围。

答案 1 :(得分:0)

很高兴你能够直观地解决这个问题。差异只是范围(但是它们在内存中的处理方式却截然不同)。

答案 2 :(得分:0)

虽然有一些,但你已经做对了 皱纹。可以从类方法和类的实例方法访问类变量(@@ foo)。

它们在继承方面表现得有点不直观:如果在基类中设置这样的变量并在子类中再次设置它,那么您将更改层次结构中所有类的值。如果您使用类变量来存储设置,这通常不是您想要的 - 您希望子类能够“覆盖”基类中的值,而不实际更改基类的值。 Rails为此提供class_attribute:它创建具有该行为的访问器方法。

最后,并非真正的单独类型,但由于类是对象,因此还有类实例变量。这些对继承没有任何作用 - 层次结构中的每个类对象都有自己完全独立的对象。与类变量不同,实例不能直接操作类实例变量。