Ruby:什么被认为是全球性的,你如何避免它?

时间:2013-12-10 20:28:08

标签: ruby singleton global-variables closures

我很难掌握在Ruby中完全避免全局变量的想法。

据我了解,如果我定义一个方法,该方法将被视为全局方法,因为我可以稍后在脚本中调用该方法。课程也一样。你能完全避免使用globalsl吗?

研究指出我对闭包和单例方法没有定论,但我仍然无法理解如何完全避免全局变量。'

编辑:我还在JavaScript中编写了一些程序并使用了如下的闭包来避免使用任何全局变量:(function(){...})();在Ruby中可以做类似的事情吗?

2 个答案:

答案 0 :(得分:0)

模块和类作为全局变量不是问题。

你可以使用一个模块来隐藏一个类,但最终你会有一些全局变量。

但是,建议避免使用全局变量和方法。

答案 1 :(得分:0)

理解避免全局变量的原因很重要。主要原因是避免全球状态。通过将变量信息存储在全局变量中,当允许程序的组件在不同时间以相同方式使用时,它们的行为会有所不同。这通常会导致意外的副作用,从而导致测试和维护问题。全局类或方法无法更改(不考虑反射),因此不是问题。

您可能与全局变量相关联的另一件事是命名空间污染,可以通过以语义分组组件的方式嵌套命名空间来部分解决。这些仍然是全球性的,因此并不是真的可以避免。