Ruby 中的静态全局类 C 变量

Static global C-like variables in Ruby

Ruby是否有静态全局变量?

我的意思是全局变量只能从定义它们的文件中访问。

简答:

长答案比较复杂。

Ruby 中只有一个全局命名空间,任何代码对它的任何更改都会对所有代码产生影响。为了使事物保持本地化,您需要将它们限定在特定的上下文中,通常是 moduleclass。例如:

module PrivateStuff
  @private_variable = "Private (mostly)"

  def self.expose_private_variable
    @private_variable
  end
end

请注意,这不会阻止其他人使用 instance_variable_get 或类似技术访问您的私有变量。

这通常不是什么大问题,因为全局变量通常是糟糕设计的标志,应该避免使用,除非别无选择,这种情况极为罕见。

与在数据访问方面执行非常严格的规则的编译语言不同,Ruby 将其留给程序员进行纪律处分,并且 在第一名。