Ruby中的静态全局类C变量

Ruby中的静态全局类C变量,ruby,global-variables,Ruby,Global Variables,Ruby有静态全局变量吗 我的意思是全局变量只能从定义它们的文件中访问。简短回答:否 长答案更为复杂 Ruby中只有一个全局名称空间,任何代码对其进行的任何更改都会对所有代码产生更改的效果。要使内容保持局部性,您需要将其范围限定到特定的上下文,通常是模块或类。例如: module PrivateStuff @private_variable = "Private (mostly)" def self.expose_private_variable @private_variab

Ruby有静态全局变量吗


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

简短回答:

长答案更为复杂

Ruby中只有一个全局名称空间,任何代码对其进行的任何更改都会对所有代码产生更改的效果。要使内容保持局部性,您需要将其范围限定到特定的上下文,通常是
模块
。例如:

module PrivateStuff
  @private_variable = "Private (mostly)"

  def self.expose_private_variable
    @private_variable
  end
end
注意,这不会阻止其他人使用
实例变量\u get
或类似技术访问您的私有变量

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


与在数据访问方面执行非常严格规则的编译语言不同,Ruby让程序员遵守规则,而不是一开始就这么做。

感谢您的简短和详细解释。我使用Ruby更像是一种脚本语言,而不是一种面向对象的语言。在我的微服务体系结构中,我发现一些全局变量简化了很多事情(主要是在我进行原型设计时),但有时这些全局变量的名称相同,并且出现了奇怪的错误。出于这个原因,我在C中把一些东西看作是静态全局变量。你观察到的“有时那些全局变量具有相同的名称”正是为什么从一开始就使用全局变量是一个糟糕的计划。Ruby使得将事情组织到模块中变得非常容易,因此没有理由不这样做。即使在快速实用程序脚本中,创建一个容器类来封装您的逻辑也是非常简单的,并且使代码更具可读性。再次感谢。