为什么.gempec使用如此复杂的代码来获取lib目录(Ruby)?

为什么.gempec使用如此复杂的代码来获取lib目录(Ruby)?,ruby,Ruby,我尝试通过“bundle gem[gem_name]”创建一个Ruby gem,一切都很顺利(有一个主文件夹,里面有lib和spec文件夹)。在.gemspec文件中,我看到了以下内容: lib = File.expand_path('../lib', __FILE__) while生成指向/lib的绝对路径。但是,同样的结果可以通过以下方式实现: File.expand_path('lib') 这篇文章解释了第一种方法有多复杂,所以我想知道,与第二种更简单的方法相比,它真的有优势吗?只要您

我尝试通过“bundle gem[gem_name]”创建一个Ruby gem,一切都很顺利(有一个主文件夹,里面有lib和spec文件夹)。在.gemspec文件中,我看到了以下内容:

lib = File.expand_path('../lib', __FILE__)
while生成指向/lib的绝对路径。但是,同样的结果可以通过以下方式实现:

File.expand_path('lib')

这篇文章解释了第一种方法有多复杂,所以我想知道,与第二种更简单的方法相比,它真的有优势吗?

只要您希望目标文件路径字符串是当前工作目录,Ruby就会为您默认第二个参数。如果出于某种原因希望创建到另一个位置的绝对路径,可以传递第二个参数:


来源:

文件。expand_path
假定
Dir.getwd
为默认参考点,这不一定与
“{uuuuuu File\uuuuu}/。”
(或Ruby 2.0的
\uuu Dir\uuuuu
)相同

自Ruby 2.0以来,您可以编写:

lib = File.expand_path('lib', __dir__)

这比原来的要好。

我认为第一个代码片段中奇怪但经常使用的习惯用法是Ruby 2.0.0中添加
\uuuu dir\uuu
的原因之一。您的两个代码片段不相等,第二个代码片段不使用当前文件路径。您的意思是不是
\uuuu file\uuu/。