Dir之间的区别[File.join(File.dirname(__ FILE__),' ..',' lib',' ** / *。rb')] .each {| f | require f}和$<< File.join(文件

时间:2014-04-25 22:10:38

标签: ruby rspec

spec_helper.rb的其中两个代码之间有什么区别吗?

或实际上做同样的事情?

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

1 个答案:

答案 0 :(得分:3)

它们根本不相同。

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]会生成一个与globbing字符串匹配的所有文件(只是一个字符串)的数组。在这种情况下,lib目录的所有文件(包括子目录)以.rb结尾。然后代码遍历代表文件的每个字符串和require的代码(将代码加载到当前文件中)。