spec_helper.rb的其中两个代码之间有什么区别吗?
或实际上做同样的事情?
$ << File.join(File.dirname(FILE), '..', 'lib')
Dir[File.join(File.dirname(__FILE__), '..', 'lib', '**/*.rb')].each {
|f| require f }
答案 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
的代码(将代码加载到当前文件中)。