是否需要File.expand_path(…,__FILE__)最佳实践?

是否require File.expand_path(..., __FILE__)要求项目中的其他文件的最佳方式?

在Ruby 1.9.2 + require_relative可能是更正确的方法。

require被改为不包括你的'.' 目录出于安全原因。 require_relative被添加来为模块提供一个相对于调用脚本path的本地文件解决scheme。

你可以在这里searchStackOverflow ,特别是在“ 什么是Ruby中的require_relative? ”,以及互联网,并find使用技巧和原因,以解释它是如何产生的。

在Ruby 2.0中,您可以使用Kernel#__dir__

除非你修改$LOAD_PATH ,如果你继续从相同的目录结构加载,这是一个好主意,你坚持这样做。

我已经采取了这样做的方式,以确保事情尽可能跨平台,是这样的:

 require File.expand_path(File.join(*%w[ ... ]), File.dirname(__FILE__)) 

这有点冗长,但是在大多数情况下,这会导致最短path和最less的语法松散。

更具体的例子是:

 require File.expand_path(File.join(*%w[ .. lib example ]), File.dirname(__FILE__)) 

如果你加载了很多的文件,你可以把它与$LOAD_PATH的修改结合起来,以简化这个事情:

 $LOAD_PATH << File.expand_path(File.join(*%w[ .. lib ]), File.dirname(__FILE__)) require 'example' 

在Ruby 1.8.x中,核心中没有require_relativeFile.expand_path(...,__FILE__)将不起作用。

假设__FILE__ == "/home/yourname/foo.rb"File.expand_path("bar.rb",__FILE__)给出"/home/yourname/foo.rb/bar.rb

你想要的是File.expand_path("bar.rb",File.dirname(__FILE__)) ,它返回"/home/yourname/bar.rb"

您也可以从backports gem中获取require_relative