如果我想让 require
成为 Ruby 还有中的一个相对文件,我想让它在1.8. x 和 > = 1.9.2中都能工作,最佳实践是什么?
我看到了一些选择:
$LOAD_PATH << '.'
然后忘记一切$LOAD_PATH << File.dirname(__FILE__)
require './path/to/file'
RUBY_VERSION
是否 < 1.9.2,然后将 require_relative
定义为 require
,在以后需要的任何地方使用 require_relative
require_relative
是否已经存在,如果存在,尝试按照前面的情况继续require File.join(File.dirname(__FILE__), 'path/to/file')
这样奇怪的结构——唉,它们似乎在 Ruby 1.9中不能完全工作,因为,例如: < pre > < code > < code > $cat caller.rb
Join (FILE.dirname (_ _ FILE _ _) ,‘ path/to/FILE’)
$cat path/to/file. rb
写上“一些测试”
$Ruby 来电者
一些测试
$pwd
/tmp
$Ruby/tmp/call
一些测试
$Ruby tmp/来电者
Tmp/caller.rb: 1: in‘ need’: no such file to load —— tmp/path/to/file (LoadError)
来自 tmp/caller.rb: 1: in“ < main >” require File.join(File.expand_path(File.dirname(__FILE__)), 'path/to/file')
似乎可以工作,但它很奇怪,看起来也不是很好。require
来处理相关文件。有一个 与 StackOverflow 密切相关的问题给出了一些更多的例子,但它没有给出一个明确的答案-这是一个最佳实践。
有没有什么像样的、被所有人接受的通用解决方案可以让我的应用程序在 Ruby < 1.9.2和 > = 1.9.2上运行?
澄清一下: 我不想要像“你可以做 X”这样的答案——事实上,我已经提到了大多数问题的选择。我想要 合理性,也就是 为什么,它是一个最佳实践,它的优点和缺点是什么,以及为什么它应该被选择在其他。