Ruby 中的静态全局类 C 变量
Static global C-like variables in Ruby
Ruby是否有静态全局变量?
我的意思是全局变量只能从定义它们的文件中访问。
简答:否。
长答案比较复杂。
Ruby 中只有一个全局命名空间,任何代码对它的任何更改都会对所有代码产生影响。为了使事物保持本地化,您需要将它们限定在特定的上下文中,通常是 module
或 class
。例如:
module PrivateStuff
@private_variable = "Private (mostly)"
def self.expose_private_variable
@private_variable
end
end
请注意,这不会阻止其他人使用 instance_variable_get
或类似技术访问您的私有变量。
这通常不是什么大问题,因为全局变量通常是糟糕设计的标志,应该避免使用,除非别无选择,这种情况极为罕见。
与在数据访问方面执行非常严格的规则的编译语言不同,Ruby 将其留给程序员进行纪律处分,并且 不 在第一名。
Ruby是否有静态全局变量?
我的意思是全局变量只能从定义它们的文件中访问。
简答:否。
长答案比较复杂。
Ruby 中只有一个全局命名空间,任何代码对它的任何更改都会对所有代码产生影响。为了使事物保持本地化,您需要将它们限定在特定的上下文中,通常是 module
或 class
。例如:
module PrivateStuff
@private_variable = "Private (mostly)"
def self.expose_private_variable
@private_variable
end
end
请注意,这不会阻止其他人使用 instance_variable_get
或类似技术访问您的私有变量。
这通常不是什么大问题,因为全局变量通常是糟糕设计的标志,应该避免使用,除非别无选择,这种情况极为罕见。
与在数据访问方面执行非常严格的规则的编译语言不同,Ruby 将其留给程序员进行纪律处分,并且 不 在第一名。