2012-07-25 43 views
9

我看到别人的库下面的代码:需要模块内的文件?

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) 

Source

我想知道有什么区别,当我们在一个模块中把require

回答

11

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

应当指出的是,在这种情况下,内require总是运行,因为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)