10

我在某人的存储库中看到了以下源代码:

module Twitter
  module Bootstrap
      module Rails
        require 'twitter/bootstrap/rails/engine' if defined?(Rails)
      end
   end
end

require 'less-rails'
require 'twitter/bootstrap/rails/bootstrap' if defined?(Rails)

资源

我想知道当我们放入require一个模块时有什么区别?

4

1 回答 1

13

就其而言没有区别require,即require始终将文件加载到全局命名空间中。

应该注意的是,在这种情况下,innerrequire始终运行,因为Rails此时引用它所在的模块,因此if那里的语句将始终评估为 true。

这意味着代码等同于可能不那么令人困惑的代码:

module Twitter
  module Bootstrap
    module Rails
    end
  end
end

require 'twitter/bootstrap/rails/engine'
require 'less-rails'
require 'twitter/bootstrap/rails/bootstrap' if defined?(Rails)
于 2012-07-25T03:36:13.417 回答