我只是在学习Ruby,并且有一个非常初学的问题。这四种变量之间的差异主要只是范围。那么局部变量只能在当前块中使用,当前实例中的实例变量,每个范围内的全局变量以及最后的当前类中的类变量?非常感谢!
答案 0 :(得分:0)
你做对了。差异只是范围。
答案 1 :(得分:0)
答案 2 :(得分:0)
虽然有一些,但你已经做对了 皱纹。可以从类方法和类的实例方法访问类变量(@@ foo)。
它们在继承方面表现得有点不直观:如果在基类中设置这样的变量并在子类中再次设置它,那么您将更改层次结构中所有类的值。如果您使用类变量来存储设置,这通常不是您想要的 - 您希望子类能够“覆盖”基类中的值,而不实际更改基类的值。 Rails为此提供class_attribute
:它创建具有该行为的访问器方法。
最后,并非真正的单独类型,但由于类是对象,因此还有类实例变量。这些对继承没有任何作用 - 层次结构中的每个类对象都有自己完全独立的对象。与类变量不同,实例不能直接操作类实例变量。