全局变量被覆盖

时间:2019-02-13 17:55:05

标签: ruby-on-rails ruby

我有一个带有两个控制器abc_controller.rb和xyz_controller.rb的Web应用程序。两者都具有具有不同内容的相同变量:

$pqrs = ["1", "2"] // in one controller, abc
$pqrs = ["3", "4"] // in another controller, xyz

我正在打开一个网址为abc的网页,该网页的名称为abc_controller.rb。当我在$pqrs中打印abc_controller的值时,它将输出["3", "4"]而不是["1", "2"]

任何想法可能是什么原因吗?

1 个答案:

答案 0 :(得分:3)

您正在使用的是全局变量。全局变量以$开头,可在整个应用程序中使用。如果您在应用程序中的任何位置更改变量,则它将在所有位置更改。根据您要尝试执行的操作,可以通过使用@@来使用类变量(仍然不是很好,但是要优于全局变量),也可以通过使用@来使用类实例变量。 / p>

类变量类似于全局变量,但是只有类及其子类可以访问它。这意味着子类对类变量所做的任何更改都会更改父类中的变量。

类实例变量仅可用于创建变量的类。您可以在子类或其他类中创建相同的类实例变量,并且实例变量名称不会冲突。

您可以在此处阅读有关类变量和类实例变量的更多信息: Class Variables and Class Instance Variables