Ruby 需要文件。展开路径(…,\u文件\u)是最佳做法吗?

Ruby 需要文件。展开路径(…,\u文件\u)是最佳做法吗?,ruby,require,Ruby,Require,是require File.expand\u path(…,\u File\uuuuuu)在项目中需要其他文件的最佳方式?在Ruby 1.9.2+require\u relative中可能是更正确的方式 出于安全原因,require已更改为不包含您的。目录require_relative,以便为与调用脚本路径相关的模块提供本地文件解决方案 您可以,特别是在“”和Internet中,找到使用技巧和解释它是如何产生的。除非您修改$LOAD\u PATH,如果您继续从相同的目录结构加载,这将是一个好主

require File.expand\u path(…,\u File\uuuuuu)
在项目中需要其他文件的最佳方式?

在Ruby 1.9.2+
require\u relative
中可能是更正确的方式

出于安全原因,
require
已更改为不包含您的
目录<添加了code>require_relative,以便为与调用脚本路径相关的模块提供本地文件解决方案


您可以,特别是在“”和Internet中,找到使用技巧和解释它是如何产生的。

除非您修改
$LOAD\u PATH
,如果您继续从相同的目录结构加载,这将是一个好主意,您将无法这样做

为了确保尽可能跨平台,我采取了以下方式:

require File.expand_path(File.join(*%w[ ... ]), File.dirname(__FILE__))
这有点冗长,但在大多数情况下,它会导致尽可能短的路径和最少的语法错误

一个更具体的例子是:

require File.expand_path(File.join(*%w[ .. lib example ]), File.dirname(__FILE__))
如果要加载大量文件并执行以下操作,可以将此操作与对
$LOAD\u PATH
的修改相结合,以简化操作:

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

require 'example'

Ruby 1.8.x中的
$LOAD\u PATH,在内核中没有
require\u relative
文件。展开\u PATH(…,\u File\u)
将无法工作

假设
\uu文件\uu==“/home/yourname/foo.rb”
File.expand\u路径(“bar.rb”,_uu文件)
给出
“/home/yourname/foo.rb/bar.rb

您需要的是
File.expand\u path(“bar.rb”,File.dirname(\uu File\uuuu))
,它返回
“/home/yourname/bar.rb”


您也可以从Ruby 2.x中的.

中获得
require\u relative
,如果可以的话,您可以使用I'd+100。这是我希望我可以不使用的东西。您可以始终执行
require文件的可能副本。展开路径(../baz.rb“,\uuuuuu File\uu)
将foo.rb中的baz.rb包含在同一目录中。根据Matt的评论,我看到
文件。展开路径(“../../lib/mygem.rb”,\uuuuuuu文件)
是2.1.0文档中为
expand_path
给出的一个实际示例。但这涉及到将非目录假装为目录,然后移动到其假定的父目录!我很困惑官方文档会推荐这样一种异常方法,我想知道它是否只通过实现的一些脆弱的副作用起作用ch可能会在未来的版本中改变行为。我认为
dirname
方法更干净。而且,“,”是解释这一点的好线索。