Ruby有静态全局变量吗?
我的意思是全局变量只能从定义它们的文件中访问。
答案 0 :(得分:2)
简短回答:否。
答案很长很复杂。
Ruby中只有一个全局命名空间,任何代码对它的任何更改都会对所有代码进行更改。为了保持本地化,您需要将它们限定在特定的上下文中,通常是module
或class
。例如:
module PrivateStuff
@private_variable = "Private (mostly)"
def self.expose_private_variable
@private_variable
end
end
请注意,这并不妨碍他人使用instance_variable_get
或类似技术访问您的私人变量。
这通常不是什么大不了的事,因为全局变量通常是设计不良的标志,应该避免,除非别无选择,这种情况非常罕见。
与在数据访问方面强制执行非常严格的规则的编译语言不同,Ruby会让程序员遵守纪律,并且不首先执行此操作。