我很难理解在Ruby中完全避免全局变量的想法。
据我所知,如果我定义了一个方法,该方法将被视为全局方法,因为我稍后可以在脚本中调用该方法。上课也是如此。你能完全避免globalsl吗?
研究表明,我对闭包和单例方法没有定论,但我仍然很难理解如何"完全避免全局方法"
编辑:我也用JavaScript编写了一些程序,并使用了如下闭包来避免使用任何全局变量:(function(){...})();
在Ruby中也可以做类似的事情吗?
了解避免全局变量背后的原因很重要。主要原因是避免全球状态。通过将变量信息存储在全局变量中,可以允许程序的组件在不同时间以相同的方式使用时表现不同。这通常会导致意外的副作用,从而导致测试和维护问题。全局类或方法无法更改(不考虑反射),因此不是问题。
您可能与全局变量相关联的另一件事是名称空间污染,它可以通过以语义分组组件的方式嵌套名称空间来部分解决。尽管如此,这些仍然是全球性的,因此并非真正可以避免。
作为全局变量的模块和类不是问题。
您可以使用一个模块来隐藏一个类,但最终您将拥有一些全局。
不过,建议避免使用全局变量和方法。