全局变量可以在任何作用域中访问:
def a_scope $var = "some value" end def another_scope $var end a_scope another_scope # => "some value"
全局变量的问题在于系统的任何部分都可以修改它们,因此,我们几乎无法追踪谁把它们改成了什么。
所以,如非必要,尽可能少使用全局变量。
有时我们可以用顶级实例变量来代替全局变量。它们是顶级对象main的实例变量:
@var = "The top-level @var" def my_method @var end my_method # => "The top-level @var"
只要main在扮演self的角色,就可以访问一个顶级实例变量,但当其他对象成为self时,顶级实例变量就退出作用域了:
class MyClass def my_method @var = "This is not the top-level @var!" end end
由于不像全局变量那么没有安全性,一般认为顶级实例变量比全局变量更安全。