【问题标题】:Difference between Dir[File.join(File.dirname(__FILE__), '..', 'lib', '**/*.rb')].each { |f| require f } and $ << File.join(FileDir[File.join(File.dirname(__FILE__), '..', 'lib', '**/*.rb')].each { |f| 之间的区别需要 f } 和 $ << File.join(File
【发布时间】:2014-06-11 19:18:38
【问题描述】:

spec_helper.rb 的这两个代码有什么区别吗?

或者实际上做同样的事情?

$ << File.join(File.dirname(FILE), '..', 'lib')
Dir[File.join(File.dirname(__FILE__), '..', 'lib', '**/*.rb')].each { 
|f| require f }

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

    它们根本不等价。

    File.join(File.dirname(FILE), '..', 'lib') 不起作用。正确的版本是File.join(File.dirname(__FILE__), '..', 'lib'),它获取该行所在文件的路径,并将它们与/(当然取决于您的操作系统)与'..''lib' 连接起来。所以最后你会得到一个字符串(仅此而已),类似于'/location-of-the-file/../lib'

    第二行是一个 Dir.glob(参见 http://ruby-doc.org/core-1.9.3/Dir.html#method-c-glob),它基于 File.dirname(__FILE__), '..', 'lib', '**/*.rb') 的输入字符串(它再次执行我上面描述的操作)。 Dir[string] 会生成一个包含与通配字符串匹配的所有文件(仅是一​​个字符串)的数组。在这种情况下,lib 目录中所有以.rb 结尾的文件(包括子目录)。然后代码遍历每个代表文件的字符串和require(将代码加载到当前文件中)。

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 2012-12-08
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      相关资源
      最近更新 更多