何时使用模块以及何时使用全局范围

When to use a module and when to use a global scope

这是一个简单的问题:我是否应该有一个包含我所有 类(和子模块)的模块:

module ProjectName

  class Something
    # code
  end

  module Abc
    # code
  end

end

或者只是全局范围内的所有内容:

class Something
  # code
end

module Abc
  # code
end

不污染您的全局范围被认为是一种很好的做法。将您的应用程序命名为模块,封装相关行为使其更易于理解,有助于避免命名冲突,并让您轻松地将部分代码移植到其他应用程序或上下文中。

在 Ruby 中,它还为您提供了一种存储模块范围常量的自然方式,并为您提供了将不需要包含对象的方法直接添加到模块的选项。

在某些语言中,(特别是 JavaScript)作用域也会对性能产生影响,因为将对象保留在全局范围内可能会阻止它们获得垃圾收集的资格。