Ruby中全局变量和常量在作用域上的区别是什么



在Ruby编程语言中,既有以美元符号开头的全局变量的概念,例如$foo,也有以大写字母开头的常量的概念,如Foo。Ruby中这两种名称在作用域上的确切区别是什么?在什么特定情况下,全局变量应该优先于常量,反之亦然?

全局变量是可以从任何地方访问的变量。它们的作用域变成了整个main对象。这意味着它们可以在这个范围内的任何地方使用,即代码本身的任何地方。例如

module A
module B
class C
$glo = 'this is glo-bal variable'
end
end
end
module D
class E
CON = 'this is con-stant'
def call_glo
puts $glo
end
def call_con
puts CON
end
end
def self.call_con
puts CON
end
E.new.call_glo                 #=> "this is glo-bal variable"
end
D::E.new.call_glo                #=> "this is glo-bal variable"
D::E.new.call_con                #=> "this is con-stant"
D.call_con                       #=> Throws Error Unitialized Constant

虽然常量被限制在其定义的范围内。它们只能在定义的范围中使用。

现在,正如您所说,常数以大写字母开头,因此所有的类名和模块名本身都只是常数。

现在在上面的示例中,您可以看到call_glo方法被调用了两次。一旦来自module D的范围,而一个来自main对象范围,你看到class E的实例化之间的区别了吗?

module D中,它是在没有任何作用域运算符::的情况下调用的,而在模块之外,我们必须使用作用域运算符,这就是作用域的限制。常数与绑定

相关内容

  • 没有找到相关文章

最新更新