全局变量

全局变量具有全局范围,因此可以在任何地方使用。它们的范围不取决于它们的定义位置。当使用 $ 符号作为前缀时,变量将被视为全局变量。

$i_am_global = "omg"

class Dinosaur
    def instance_method
       p "global vars can be used everywhere. See? #{$i_am_global}, #{$another_global_var}" 
    end

    def self.class_method
       $another_global_var = "srsly?"
       p "global vars can be used everywhere. See? #{$i_am_global}"
    end
end

Dinosaur.class_method
# "global vars can be used everywhere. See? omg"
# => "global vars can be used everywhere. See? omg"

dinosaur = Dinosaur.new
dinosaur.instance_method
# "global vars can be used everywhere. See? omg, srsly?"
# => "global vars can be used everywhere. See? omg, srsly?"

由于全局变量可以在任何地方定义并且在任何地方都可见,因此调用未定义全局变量将返回 nil 而不是引发错误。

p $undefined_var
# nil
# => nil

尽管全局变量易于使用,但强烈建议不要使用常量。